00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #pragma once
00021
00022 #include <drizzled/function/str/strfunc.h>
00023
00024 namespace drizzled
00025 {
00026
00027 class Item_func_make_set :public Item_str_func
00028 {
00029 Session &session;
00030 Item *item;
00031 String tmp_str;
00032
00033 public:
00034 using Item::split_sum_func;
00035 Item_func_make_set(Session &session_arg, Item *a, List<Item> &list) :
00036 Item_str_func(list),
00037 session(session_arg),
00038 item(a) {}
00039 String *val_str(String *str);
00040 bool fix_fields(Session *session_arg, Item **ref)
00041 {
00042 assert(fixed == 0);
00043 return ((!item->fixed && item->fix_fields(session_arg, &item)) ||
00044 item->check_cols(1) ||
00045 Item_func::fix_fields(session_arg, ref));
00046 }
00047 void split_sum_func(Session *session_arg, Item **ref_pointer_array, List<Item> &fields);
00048 void fix_length_and_dec();
00049 void update_used_tables();
00050 const char *func_name() const { return "make_set"; }
00051
00052 bool walk(Item_processor processor, bool walk_subquery, unsigned char *arg)
00053 {
00054 return item->walk(processor, walk_subquery, arg) ||
00055 Item_str_func::walk(processor, walk_subquery, arg);
00056 }
00057 Item *transform(Item_transformer transformer, unsigned char *arg);
00058 virtual void print(String *str);
00059 };
00060
00061 }
00062