code: func WrapWithCastAsDecimal(ctx sessionctx.Context, expr Expression) Expression {
  	if expr.GetType().EvalType() == types.ETDecimal {
  		return expr
  	}
  	tp := types.NewFieldType(mysql.TypeNewDecimal)
  	tp.Flen, tp.Decimal = expr.GetType().Flen, types.UnspecifiedLength
  	types.SetBinChsClnFlag(tp)
  	tp.Flag |= expr.GetType().Flag & mysql.UnsignedFlag
  	return BuildCastFunction(ctx, expr, tp)
  }
docs: // WrapWithCastAsDecimal wraps `expr` with `cast` if the return type of expr is
  // not type decimal, otherwise, returns `expr` directly.