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/item/cache_decimal.h>
00023
00024 namespace drizzled {
00025
00026 void Item_cache_decimal::store(Item *item)
00027 {
00028 type::Decimal *val= item->val_decimal_result(&decimal_value);
00029 if (!(null_value= item->null_value) && val != &decimal_value)
00030 class_decimal2decimal(val, &decimal_value);
00031 }
00032
00033 double Item_cache_decimal::val_real()
00034 {
00035 assert(fixed);
00036 double res;
00037 class_decimal2double(E_DEC_FATAL_ERROR, &decimal_value, &res);
00038 return res;
00039 }
00040
00041 int64_t Item_cache_decimal::val_int()
00042 {
00043 assert(fixed);
00044 int64_t res;
00045 decimal_value.val_int32(E_DEC_FATAL_ERROR, unsigned_flag, &res);
00046 return res;
00047 }
00048
00049 String* Item_cache_decimal::val_str(String *str)
00050 {
00051 assert(fixed);
00052 class_decimal_round(E_DEC_FATAL_ERROR, &decimal_value, decimals, false, &decimal_value);
00053 class_decimal2string(&decimal_value, 0, str);
00054 return str;
00055 }
00056
00057 type::Decimal *Item_cache_decimal::val_decimal(type::Decimal *)
00058 {
00059 assert(fixed);
00060 return &decimal_value;
00061 }
00062
00063
00064 }