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