summaryrefslogtreecommitdiff
path: root/sql/item.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item.cc')
-rw-r--r--sql/item.cc34
1 files changed, 30 insertions, 4 deletions
diff --git a/sql/item.cc b/sql/item.cc
index cbb760156b3..1e8b4d8630d 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)
{
marker= 0;
maybe_null=null_value=with_sum_func=unsigned_flag=0;
collation.set(default_charset(), DERIVATION_COERCIBLE);
- 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,12 +110,35 @@ 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;
+ if (orig_name)
+ name= orig_name;
DBUG_VOID_RETURN;
}
+
+/*
+ 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),
@@ -2279,6 +2302,9 @@ 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;