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/field.h>
00023 #include <drizzled/item/cache.h>
00024 #include <drizzled/item/cache_decimal.h>
00025 #include <drizzled/item/cache_int.h>
00026 #include <drizzled/item/cache_real.h>
00027 #include <drizzled/item/cache_row.h>
00028 #include <drizzled/item/cache_str.h>
00029 #include <drizzled/lex_string.h>
00030
00031 namespace drizzled
00032 {
00033
00034 Item_cache* Item_cache::get_cache(const Item *item)
00035 {
00036 switch (item->result_type()) {
00037 case INT_RESULT:
00038 return new Item_cache_int();
00039
00040 case REAL_RESULT:
00041 return new Item_cache_real();
00042
00043 case DECIMAL_RESULT:
00044 return new Item_cache_decimal();
00045
00046 case STRING_RESULT:
00047 return new Item_cache_str(item);
00048
00049 case ROW_RESULT:
00050 return new Item_cache_row();
00051 }
00052
00053 assert(0);
00054 abort();
00055 }
00056
00057
00058 void Item_cache::print(String *str)
00059 {
00060 str->append(STRING_WITH_LEN("<cache>("));
00061 if (example)
00062 example->print(str);
00063 else
00064 Item::print(str);
00065 str->append(')');
00066 }
00067
00068 bool Item_cache::eq_def(Field *field)
00069 {
00070 return cached_field ? cached_field->eq_def (field) : false;
00071 }
00072
00073 }