code: func EvaluateExprWithNull(ctx sessionctx.Context, schema *Schema, expr Expression) Expression {
  	switch x := expr.(type) {
  	case *ScalarFunction:
  		args := make([]Expression, len(x.GetArgs()))
  		for i, arg := range x.GetArgs() {
  			args[i] = EvaluateExprWithNull(ctx, schema, arg)
  		}
  		return NewFunctionInternal(ctx, x.FuncName.L, types.NewFieldType(mysql.TypeTiny), args...)
  	case *Column:
  		if !schema.Contains(x) {
  			return x
  		}
  		return &Constant{Value: types.Datum{}, RetType: types.NewFieldType(mysql.TypeNull)}
  	case *Constant:
  		if x.DeferredExpr != nil {
  			return FoldConstant(x)
  		}
  	}
  	return expr
  }
docs: // EvaluateExprWithNull sets columns in schema as null and calculate the final result of the scalar function.
  // If the Expression is a non-constant value, it means the result is unknown.