code: func EvaluateExprWithNull(ctx context.Context, schema Schema, expr Expression) (Expression, error) {
  	switch x := expr.(type) {
  	case *ScalarFunction:
  		var err error
  		args := make([]Expression, len(x.GetArgs()))
  		for i, arg := range x.GetArgs() {
  			args[i], err = EvaluateExprWithNull(ctx, schema, arg)
  			if err != nil {
  				return nil, errors.Trace(err)
  			}
  		}
  		newFunc, err := NewFunction(ctx, x.FuncName.L, types.NewFieldType(mysql.TypeTiny), args...)
  		if err != nil {
  			return nil, errors.Trace(err)
  		}
  		return FoldConstant(ctx, newFunc), nil
  	case *Column:
  		if schema.GetColumnIndex(x) == -1 {
  			return x, nil
  		}
  		constant := &Constant{Value: types.Datum{}}
  		return constant, nil
  	default:
  		return x.Clone(), nil
  	}
  }
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.