22 #include <drizzled/function/math/mod.h>
23 #include <drizzled/type/decimal.h>
32 int64_t Item_func_mod::int_op()
35 int64_t value= args[0]->val_int();
36 int64_t val2= args[1]->val_int();
39 if ((null_value= args[0]->null_value || args[1]->null_value))
43 signal_divide_by_null();
47 if (args[0]->unsigned_flag)
48 result= args[1]->unsigned_flag ?
49 ((uint64_t) value) % ((uint64_t) val2) : ((uint64_t) value) % val2;
51 result= args[1]->unsigned_flag ?
52 (int64_t)(value % ((uint64_t) val2)) : (int64_t)(value % val2);
57 double Item_func_mod::real_op()
60 double value= args[0]->val_real();
61 double val2= args[1]->val_real();
62 if ((null_value= args[0]->null_value || args[1]->null_value))
66 signal_divide_by_null();
69 return fmod(value,val2);
78 val1= args[0]->val_decimal(&value1);
79 if ((null_value= args[0]->null_value))
81 val2= args[1]->val_decimal(&value2);
82 if ((null_value= args[1]->null_value))
84 switch (class_decimal_mod(E_DEC_FATAL_ERROR & ~E_DEC_DIV_ZERO, decimal_value,
90 signal_divide_by_null();
98 void Item_func_mod::result_precision()
100 decimals= max(args[0]->decimals, args[1]->decimals);
101 max_length= max(args[0]->max_length, args[1]->max_length);
105 void Item_func_mod::fix_length_and_dec()
107 Item_num_op::fix_length_and_dec();
109 unsigned_flag= args[0]->unsigned_flag;