00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <config.h>
00021
00022 #include <drizzled/function/math/int_divide.h>
00023
00024 namespace drizzled
00025 {
00026
00027
00028 int64_t Item_func_int_div::val_int()
00029 {
00030 assert(fixed == 1);
00031 int64_t value=args[0]->val_int();
00032 int64_t val2=args[1]->val_int();
00033 if ((null_value= (args[0]->null_value || args[1]->null_value)))
00034 return 0;
00035 if (val2 == 0)
00036 {
00037 signal_divide_by_null();
00038 return 0;
00039 }
00040 return (unsigned_flag ?
00041 (int64_t)((uint64_t) value / (uint64_t) val2) :
00042 value / val2);
00043 }
00044
00045 void Item_func_int_div::fix_length_and_dec()
00046 {
00047 Item_result argtype= args[0]->result_type();
00048
00049 max_length=args[0]->max_length -
00050 (argtype == DECIMAL_RESULT || argtype == INT_RESULT ?
00051 args[0]->decimals : 0);
00052 maybe_null=1;
00053 unsigned_flag=args[0]->unsigned_flag | args[1]->unsigned_flag;
00054 }
00055
00056 }