diff options
author | unknown <bell@sanja.is.com.ua> | 2004-07-23 09:20:58 +0300 |
---|---|---|
committer | unknown <bell@sanja.is.com.ua> | 2004-07-23 09:20:58 +0300 |
commit | 1b98202be7544b34f79b99cbf22e4b29090e4f9f (patch) | |
tree | 468a63f90437f6089d0851ca6f6d1961008de608 /sql/item.h | |
parent | dc4de8d562bf781bc6640a00e2720548f20a53e0 (diff) | |
download | mariadb-git-1b98202be7544b34f79b99cbf22e4b29090e4f9f.tar.gz |
fixed using VIEW fields (BUG#4617)
mysql-test/r/view.result:
using VIEW fields several times in query resolved via temporary tables
mysql-test/t/view.test:
using VIEW fields several times in query resolved via temporary tables
sql/item.h:
fixed using of result_field by Item_ref
sql/sql_base.cc:
Create Item_ref as reference on VIEW fields expression reference
sql/sql_insert.cc:
privent creating Item_ref in insert list (where Item_fields should be)
sql/sql_lex.cc:
Item_ref creation control
sql/sql_lex.h:
Item_ref creation control
sql/sql_update.cc:
privent creating Item_ref in insert list (where Item_fields should be) and creation Item_fields for UPDATE list
sql/table.cc:
Do not create Item_ref for internal view of view processing
Diffstat (limited to 'sql/item.h')
-rw-r--r-- | sql/item.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sql/item.h b/sql/item.h index 583b17ca1df..afa439dff32 100644 --- a/sql/item.h +++ b/sql/item.h @@ -887,15 +887,15 @@ public: Item *orig_item; /* things in 'cleanup()' */ Item_ref(Item **hook, Item *original,const char *db_par, const char *table_name_par, const char *field_name_par) - :Item_ident(db_par,table_name_par,field_name_par),ref(0), hook_ptr(hook), - orig_item(original) {} - Item_ref(Item **item, Item **hook, + :Item_ident(db_par, table_name_par, field_name_par), result_field(0), + ref(0), hook_ptr(hook), orig_item(original) {} + Item_ref(Item **item, Item **hook, const char *table_name_par, const char *field_name_par) - :Item_ident(NullS,table_name_par,field_name_par), + :Item_ident(NullS, table_name_par, field_name_par), result_field(0), ref(item), hook_ptr(hook), orig_item(hook ? *hook:0) {} // Constructor need to process subselect with temporary tables (see Item) Item_ref(THD *thd, Item_ref *item, Item **hook) - :Item_ident(thd, item), ref(item->ref), + :Item_ident(thd, item), result_field(item->result_field), ref(item->ref), hook_ptr(hook), orig_item(hook ? *hook : 0) {} enum Type type() const { return REF_ITEM; } bool eq(const Item *item, bool binary_cmp) const @@ -940,6 +940,7 @@ public: return depended_from ? OUTER_REF_TABLE_BIT : (*ref)->used_tables(); } void set_result_field(Field *field) { result_field= field; } + Field *get_tmp_table_field() { return result_field; } bool is_result_field() { return 1; } void save_in_result_field(bool no_conversions) { |