diff options
Diffstat (limited to 'sql/item.h')
-rw-r--r-- | sql/item.h | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/sql/item.h b/sql/item.h index 0d38c5eb5f8..baff64cac24 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1440,18 +1440,6 @@ public: max_length= char_to_byte_length_safe(max_char_length_arg, collation.collation->mbmaxlen); } - void fix_char_length_ulonglong(ulonglong max_char_length_arg) - { - ulonglong max_result_length= max_char_length_arg * - collation.collation->mbmaxlen; - if (max_result_length >= MAX_BLOB_WIDTH) - { - max_length= MAX_BLOB_WIDTH; - maybe_null= 1; - } - else - max_length= (uint32) max_result_length; - } /* Return TRUE if the item points to a column of an outer-joined table. */ @@ -2063,9 +2051,14 @@ public: bitmap_fast_test_and_set(tab->read_set, field->field_index); if (field->vcol_info) tab->mark_virtual_col(field); - } + } + } + void update_used_tables() + { + update_table_bitmaps(); + if (field && field->table) + maybe_null= field->maybe_null(); } - void update_used_tables() { update_table_bitmaps(); } Item *get_tmp_table_item(THD *thd); bool collect_item_field_processor(uchar * arg); bool add_field_to_set_processor(uchar * arg); @@ -3116,7 +3109,11 @@ public: enum Item_result result_type () const { return orig_item->result_type(); } enum_field_types field_type() const { return orig_item->field_type(); } table_map used_tables() const { return orig_item->used_tables(); } - void update_used_tables() { orig_item->update_used_tables(); } + void update_used_tables() + { + orig_item->update_used_tables(); + maybe_null= orig_item->maybe_null; + } bool const_item() const { return orig_item->const_item(); } table_map not_null_tables() const { return orig_item->not_null_tables(); } bool walk(Item_processor processor, bool walk_subquery, uchar *arg) @@ -3208,6 +3205,7 @@ public: Item *replace_equal_field(uchar *arg); table_map used_tables() const; table_map not_null_tables() const; + void update_used_tables(); bool walk(Item_processor processor, bool walk_subquery, uchar *arg) { return (*ref)->walk(processor, walk_subquery, arg) || @@ -4033,7 +4031,7 @@ public: bool cache_value(); bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate); int save_in_field(Field *field, bool no_conversions); - void store_packed(longlong val_arg); + void store_packed(longlong val_arg, Item *example); /* Having a clone_item method tells optimizer that this object is a constant and need not be optimized further. @@ -4042,7 +4040,7 @@ public: Item *clone_item() { Item_cache_temporal *item= new Item_cache_temporal(cached_field_type); - item->store_packed(value); + item->store_packed(value, example); return item; } }; |