code: func (c *Constant) EvalReal(ctx sessionctx.Context, _ chunk.Row) (float64, bool, error) {
  	if c.DeferredExpr != nil {
  		dt, err := c.DeferredExpr.Eval(chunk.Row{})
  		if err != nil {
  			return 0, true, err
  		}
  		if dt.IsNull() {
  			return 0, true, nil
  		}
  		val, err := dt.ToFloat64(ctx.GetSessionVars().StmtCtx)
  		if err != nil {
  			return 0, true, err
  		}
  		c.Value.SetFloat64(val)
  	} else {
  		if c.GetType().Tp == mysql.TypeNull || c.Value.IsNull() {
  			return 0, true, nil
  		}
  	}
  	if c.GetType().Hybrid() || c.Value.Kind() == types.KindBinaryLiteral || c.Value.Kind() == types.KindString {
  		res, err := c.Value.ToFloat64(ctx.GetSessionVars().StmtCtx)
  		return res, err != nil, err
  	}
  	return c.Value.GetFloat64(), false, nil
  }
docs: // EvalReal returns real representation of Constant.