24 #include <drizzled/dtcollation.h>
25 #include <drizzled/charset.h>
26 #include <drizzled/item_result.h>
27 #include <drizzled/memory/sql_alloc.h>
28 #include <drizzled/sql_list.h>
29 #include <drizzled/sql_string.h>
46 typedef bool (Item::*Item_analyzer) (
unsigned char **argp);
47 typedef Item* (Item::*Item_transformer) (
unsigned char *arg);
48 typedef void (*Cond_traverser) (
const Item *item,
void *arg);
49 typedef bool (Item::*Item_processor) (
unsigned char *arg);
59 int8_t is_expensive_cache;
60 virtual bool is_expensive_processor(
unsigned char *arg);
125 bool is_unsigned()
const
127 return unsigned_flag;
130 virtual bool negative()
const
173 set_name(arg.data(), arg.size());
176 void set_name(
const char* arg)
181 void set_name(
const char *str, uint32_t length,
const charset_info_st* cs= system_charset_info);
182 void init_make_field(SendField *tmp_field, enum_field_types type);
183 virtual void cleanup();
184 virtual void make_field(SendField *field);
194 Field *make_string_field(Table *table);
195 virtual bool fix_fields(Session *, Item **);
201 virtual void fix_after_pullout(Select_Lex *new_parent, Item **ref);
212 virtual int save_in_field(
Field *field,
bool no_conversions);
213 virtual void save_org_in_field(
Field *field)
215 (void) save_in_field(field,
true);
217 virtual int save_safe_in_field(Field *field)
219 return save_in_field(field,
true);
224 virtual void send(plugin::Client *
client, String *str);
235 virtual bool eq(
const Item *,
bool binary_cmp)
const;
236 virtual Item_result result_type()
const
240 virtual Item_result cast_to_int_type()
const
242 return result_type();
244 virtual enum_field_types string_field_type()
const;
245 virtual enum_field_types field_type()
const;
246 virtual enum Type type()
const =0;
284 virtual int64_t val_int_endpoint(
bool left_endp,
bool *incl_endp);
295 virtual double val_real()=0;
304 virtual int64_t val_int()=0;
311 return (uint64_t) val_int();
378 virtual bool val_bool();
389 int64_t val_int_from_decimal();
390 double val_real_from_decimal();
392 bool save_time_in_field(
Field *field);
393 bool save_date_in_field(
Field *field);
412 int save_str_value_in_field(
Field *field,
String *result);
414 virtual Field *get_tmp_table_field(
void)
419 virtual Field *tmp_table_field(Table *t_arg);
420 virtual const char *full_name(
void)
const;
428 virtual double val_result()
432 virtual int64_t val_int_result()
436 virtual String *str_result(String* tmp)
440 virtual type::Decimal *val_decimal_result(type::Decimal *val)
442 return val_decimal(val);
444 virtual bool val_bool_result()
453 return (table_map) 0L;
468 return used_tables();
479 virtual Item *clone_item()
483 virtual cond_result eq_cmp_result()
const
487 uint32_t float_length(uint32_t decimals_par)
const;
488 virtual uint32_t decimal_precision()
const;
489 int decimal_int_part()
const;
497 return used_tables() == 0;
505 return (used_tables() & ~PARAM_TABLE_BIT) == 0;
519 virtual void print(
String *str);
521 void print_item_w_name(
String *);
522 virtual void update_used_tables() {}
523 virtual void split_sum_func(Session *session,
524 Item **ref_pointer_array,
544 void split_sum_func(Session *session,
545 Item **ref_pointer_array,
548 bool skip_registered);
554 virtual bool get_date(type::Time <ime, uint32_t fuzzydate);
560 virtual bool get_time(type::Time <ime);
561 virtual bool get_date_result(type::Time <ime,uint32_t fuzzydate);
570 virtual bool is_null();
573 virtual void update_null_value ();
586 virtual void top_level_item(
void);
591 virtual void set_result_field(Field *field);
592 virtual bool is_result_field(
void);
593 virtual bool is_bool_func(
void);
594 virtual void save_in_result_field(
bool no_conversions);
599 virtual void no_rows_in_result(
void);
600 virtual Item *copy_or_same(Session *session);
602 virtual Item *copy_andor_structure(Session *session);
604 virtual Item *real_item(
void);
605 virtual const Item *real_item(
void)
const;
606 virtual Item *get_tmp_table_item(Session *session);
608 static const charset_info_st *default_charset();
609 virtual const charset_info_st *compare_collation();
611 virtual bool walk(Item_processor processor,
629 virtual Item* transform(Item_transformer transformer,
unsigned char *arg);
649 virtual Item* compile(Item_analyzer analyzer,
650 unsigned char **arg_p,
651 Item_transformer transformer,
652 unsigned char *arg_t);
654 virtual void traverse_cond(Cond_traverser traverser,
656 traverse_order order);
658 virtual bool remove_dependence_processor(
unsigned char * arg);
659 virtual bool collect_item_field_processor(
unsigned char * arg);
660 virtual bool find_item_in_field_list_processor(
unsigned char *arg);
661 virtual bool change_context_processor(
unsigned char *context);
662 virtual bool register_field_in_read_map(
unsigned char *arg);
663 virtual bool subst_argument_checker(
unsigned char **arg);
665 virtual bool cache_const_expr_analyzer(
unsigned char **arg);
666 virtual Item* cache_const_expr_transformer(
unsigned char *arg);
668 virtual Item *equal_fields_propagator(
unsigned char * arg);
669 virtual bool set_no_const_sub(
unsigned char *arg);
670 virtual Item *replace_equal_field(
unsigned char * arg);
673 virtual uint32_t cols();
674 virtual Item* element_index(uint32_t i);
675 virtual Item** addr(uint32_t i);
676 virtual bool check_cols(uint32_t c);
678 virtual bool null_inside();
680 virtual void bring_value();
693 Field *tmp_table_field_from_field_type(Table *table,
bool fixed_length);
695 virtual Item *neg_transformer(Session *session);
696 virtual Item *update_value_transformer(
unsigned char *select_arg);
697 virtual Item *safe_charset_converter(
const charset_info_st *
const tocs);
706 virtual bool result_as_int64_t();
727 virtual bool is_expensive();
729 String *check_well_formed_result(String *str,
bool send_error= 0);
750 bool eq_by_collation(Item *item,
bool binary_cmp,
const charset_info_st *
const cs);
752 inline uint32_t char_to_byte_length_safe(uint32_t char_length_arg, uint32_t mbmaxlen_arg)
754 uint64_t tmp= ((uint64_t) char_length_arg) * mbmaxlen_arg;
755 return (tmp > UINT32_MAX) ? (uint32_t) UINT32_MAX : (uint32_t) tmp;
758 uint32_t max_char_length()
const;
760 void fix_char_length(uint32_t max_char_length_arg);
763 Session &getSession()
773 const std::string &type(Item::Type type);
776 std::ostream& operator<<(std::ostream& output,
const Item &item);
781 #include <drizzled/item/ident.h>
800 Item_ident *resolved_item,
801 Item_ident *mark_item);
860 Select_Lex *last_select,
861 Select_Lex *current_sel,
862 Field *found_field, Item *found_item,
863 Item_ident *resolved_item);
865 extern void resolve_const_item(Session *session, Item **ref, Item *cmp_item);
917 bool make_copy_field,
918 uint32_t convert_blob_length);
virtual bool const_item() const
bool field_is_equal_to_item(Field *field, Item *item)
virtual bool basic_const_item() const
Item ** resolve_ref_in_select_and_group(Session *session, Item_ident *ref, Select_Lex *select)
TODO: Rename this file - func.h is stupid.
virtual table_map not_null_tables() const
Field * create_tmp_field(Session *session, Table *table, Item *item, Item::Type type, Item ***copy_func, Field **from_field, Field **default_field, bool group, bool modify_item, bool make_copy_field, uint32_t convert_blob_length)
virtual bool const_during_execution() const
Visibility Control Macros.
void mark_as_dependent(Session *session, Select_Lex *last, Select_Lex *current, Item_ident *resolved_item, Item_ident *mark_item)
void mark_select_range_as_dependent(Session *session, Select_Lex *last_select, Select_Lex *current_sel, Field *found_field, Item *found_item, Item_ident *resolved_item)
virtual table_map used_tables() const
bool is_autogenerated_name