22 #include <drizzled/function/math/multiply.h>
31 double Item_func_mul::real_op()
34 double value= args[0]->val_real() * args[1]->val_real();
35 if ((null_value=args[0]->null_value || args[1]->null_value))
37 return fix_result(value);
41 int64_t Item_func_mul::int_op()
44 int64_t value=args[0]->val_int()*args[1]->val_int();
45 if ((null_value=args[0]->null_value || args[1]->null_value))
57 val1= args[0]->val_decimal(&value1);
58 if ((null_value= args[0]->null_value))
60 val2= args[1]->val_decimal(&value2);
61 if (!(null_value= (args[1]->null_value ||
62 (class_decimal_mul(E_DEC_FATAL_ERROR, decimal_value, val1,
69 void Item_func_mul::result_precision()
72 if (result_type() == INT_RESULT)
73 unsigned_flag= args[0]->unsigned_flag | args[1]->unsigned_flag;
75 unsigned_flag= args[0]->unsigned_flag & args[1]->unsigned_flag;
77 decimals= min(args[0]->decimals + args[1]->decimals, DECIMAL_MAX_SCALE);
78 int precision= min(args[0]->decimal_precision() + args[1]->decimal_precision(),
79 (
unsigned int)DECIMAL_MAX_PRECISION);
80 max_length= class_decimal_precision_to_length(precision, decimals,unsigned_flag);