diff options
Diffstat (limited to 'sql/item.cc')
-rw-r--r-- | sql/item.cc | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/sql/item.cc b/sql/item.cc index 9e28793493d..41203e3365c 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -45,12 +45,11 @@ void item_init(void) } Item::Item(): - name_length(0), fixed(0), + name(0), orig_name(0), name_length(0), fixed(0), collation(default_charset(), DERIVATION_COERCIBLE) { marker= 0; maybe_null=null_value=with_sum_func=unsigned_flag=0; - name= 0; decimals= 0; max_length= 0; /* Put item in free list so that we can free all items at end */ @@ -80,6 +79,7 @@ Item::Item(): Item::Item(THD *thd, Item *item): str_value(item->str_value), name(item->name), + orig_name(item->orig_name), max_length(item->max_length), marker(item->marker), decimals(item->decimals), @@ -110,10 +110,12 @@ void Item::print_item_w_name(String *str) void Item::cleanup() { DBUG_ENTER("Item::cleanup"); - DBUG_PRINT("info", ("Item: 0x%lx", this)); - DBUG_PRINT("info", ("Type: %d", (int)type())); + DBUG_PRINT("info", ("Item: 0x%lx, Type: %d, name %s, original name %s", + this, (int)type(), name, orig_name)); fixed=0; marker= 0; + if (orig_name) + name= orig_name; DBUG_VOID_RETURN; } @@ -134,6 +136,26 @@ bool Item::cleanup_processor(byte *arg) } +/* + rename item (used for views, cleanup() return original name) + + SYNOPSIS + Item::rename() + new_name new name of item; +*/ + +void Item::rename(char *new_name) +{ + /* + we can compare pointers to names here, bacause if name was not changed, + pointer will be same + */ + if (!orig_name && new_name != name) + orig_name= name; + name= new_name; +} + + Item_ident::Item_ident(const char *db_name_par,const char *table_name_par, const char *field_name_par) :orig_db_name(db_name_par), orig_table_name(table_name_par), @@ -2648,6 +2670,11 @@ void Item_ref::cleanup() DBUG_ENTER("Item_ref::cleanup"); Item_ident::cleanup(); result_field= 0; + DBUG_PRINT("info", ("hook: 0x%lx(0x%lx) original item: 0x%lx", + (ulong)hook_ptr, (ulong)(hook_ptr?*hook_ptr:0), + (ulong)orig_item)); + if (hook_ptr) + *hook_ptr= orig_item; DBUG_VOID_RETURN; } |