From: Date: March 12 2010 7:33am Subject: bzr commit into mysql-5.1-bugteam branch (Sergey.Glukhov:3395) Bug#41788 List-Archive: http://lists.mysql.org/commits/103048 X-Bug: 41788 Message-Id: <0KZ500LNROUC7840@fe-emea-10.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_alJZMZFGl1ytGHDUPdC3kQ)" --Boundary_(ID_alJZMZFGl1ytGHDUPdC3kQ) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/gluh/MySQL/mysql-5.1-bugteam/ based on revid:joro@stripped 3395 Sergey Glukhov 2010-03-12 Bug#41788 mysql_fetch_field returns org_table == table by a view The problem is that Item_direct_view_ref which is inherited from Item_ident updates orig_table_name and table_name with the same values. The fix is introduction of new constructor into Item_ident and up which updates orig_table_name and table_name separately. @ mysql-test/r/metadata.result test case @ mysql-test/t/metadata.test test case @ sql/item.cc new constructor which updates orig_table_name and table_name separately. @ sql/item.h new constructor which updates orig_table_name and table_name separately. @ sql/table.cc used new constructor modified: mysql-test/r/metadata.result mysql-test/t/metadata.test sql/item.cc sql/item.h sql/table.cc === modified file 'mysql-test/r/metadata.result' --- a/mysql-test/r/metadata.result 2008-10-10 11:44:10 +0000 +++ b/mysql-test/r/metadata.result 2010-03-12 06:33:16 +0000 @@ -198,4 +198,15 @@ def IF(i, d, d) IF(i, d, d) 10 10 10 def IFNULL(d, d) IFNULL(d, d) 10 10 10 Y 128 0 63 def LEAST(d, d) LEAST(d, d) 10 10 10 Y 128 0 63 DROP TABLE t1; +# +# Bug#41788 mysql_fetch_field returns org_table == table by a view +# +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT f1 FROM t1; +SELECT f1 FROM v1 va; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def test v1 va f1 f1 3 11 0 Y 32768 0 63 +f1 +DROP VIEW v1; +DROP TABLE t1; End of 5.0 tests === modified file 'mysql-test/t/metadata.test' --- a/mysql-test/t/metadata.test 2008-10-10 10:13:12 +0000 +++ b/mysql-test/t/metadata.test 2010-03-12 06:33:16 +0000 @@ -129,4 +129,17 @@ SELECT COALESCE(d, d), IFNULL(d, d), IF( DROP TABLE t1; +--echo # +--echo # Bug#41788 mysql_fetch_field returns org_table == table by a view +--echo # + +CREATE TABLE t1 (f1 INT); +CREATE VIEW v1 AS SELECT f1 FROM t1; +--enable_metadata +SELECT f1 FROM v1 va; +--disable_metadata + +DROP VIEW v1; +DROP TABLE t1; + --echo End of 5.0 tests === modified file 'sql/item.cc' --- a/sql/item.cc 2010-03-09 21:55:08 +0000 +++ b/sql/item.cc 2010-03-12 06:33:16 +0000 @@ -556,6 +556,18 @@ Item_ident::Item_ident(Name_resolution_c } +Item_ident::Item_ident(TABLE_LIST *view_arg, const char *field_name_arg) + :orig_db_name(NullS), orig_table_name(view_arg->table_name), + orig_field_name(field_name_arg), context(&view_arg->view->select_lex.context), + db_name(NullS), table_name(view_arg->alias), + field_name(field_name_arg), + alias_name_used(FALSE), cached_field_index(NO_CACHED_FIELD_INDEX), + cached_table(NULL), depended_from(NULL) +{ + name = (char*) field_name_arg; +} + + /** Constructor used by Item_field & Item_*_ref (see Item comment) */ @@ -5721,6 +5733,20 @@ Item_ref::Item_ref(Name_resolution_conte } +Item_ref::Item_ref(TABLE_LIST *view_arg, Item **item, + const char *field_name_arg, bool alias_name_used_arg) + :Item_ident(view_arg, field_name_arg), + result_field(NULL), ref(item) +{ + alias_name_used= alias_name_used_arg; + /* + This constructor is used to create some internal references over fixed items + */ + if (ref && *ref && (*ref)->fixed) + set_properties(); +} + + /** Resolve the name of a reference to a column reference. === modified file 'sql/item.h' --- a/sql/item.h 2010-02-06 19:54:30 +0000 +++ b/sql/item.h 2010-03-12 06:33:16 +0000 @@ -1402,6 +1402,7 @@ public: const char *db_name_arg, const char *table_name_arg, const char *field_name_arg); Item_ident(THD *thd, Item_ident *item); + Item_ident(TABLE_LIST *view_arg, const char *field_name_arg); const char *full_name() const; void cleanup(); bool remove_dependence_processor(uchar * arg); @@ -2222,6 +2223,8 @@ public: Item_ref(Name_resolution_context *context_arg, Item **item, const char *table_name_arg, const char *field_name_arg, bool alias_name_used_arg= FALSE); + Item_ref(TABLE_LIST *view_arg, Item **item, + const char *field_name_arg, bool alias_name_used_arg= FALSE); /* Constructor need to process subselect with temporary tables (see Item) */ Item_ref(THD *thd, Item_ref *item) @@ -2337,6 +2340,12 @@ public: {} /* Constructor need to process subselect with temporary tables (see Item) */ Item_direct_ref(THD *thd, Item_direct_ref *item) : Item_ref(thd, item) {} + Item_direct_ref(TABLE_LIST *view_arg, Item **item, + const char *field_name_arg, + bool alias_name_used_arg= FALSE) + :Item_ref(view_arg, item, field_name_arg, + alias_name_used_arg) + {} double val_real(); longlong val_int(); @@ -2362,6 +2371,10 @@ public: /* Constructor need to process subselect with temporary tables (see Item) */ Item_direct_view_ref(THD *thd, Item_direct_ref *item) :Item_direct_ref(thd, item) {} + Item_direct_view_ref(TABLE_LIST *view_arg, Item **item, + const char *field_name_arg) + :Item_direct_ref(view_arg, item, field_name_arg) + {} bool fix_fields(THD *, Item **); bool eq(const Item *item, bool binary_cmp) const; === modified file 'sql/table.cc' --- a/sql/table.cc 2010-02-09 11:43:44 +0000 +++ b/sql/table.cc 2010-03-12 06:33:16 +0000 @@ -4023,9 +4023,7 @@ Item *create_view_field(THD *thd, TABLE_ { DBUG_RETURN(field); } - Item *item= new Item_direct_view_ref(&view->view->select_lex.context, - field_ref, view->alias, - name); + Item *item= new Item_direct_view_ref(view, field_ref, name); DBUG_RETURN(item); } --Boundary_(ID_alJZMZFGl1ytGHDUPdC3kQ) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/sergey.glukhov@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/sergey.glukhov@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sergey.glukhov@stripped # target_branch: file:///home/gluh/MySQL/mysql-5.1-bugteam/ # testament_sha1: c7fb9baba5bbfa5451fcbdf050c5e6d1dc214363 # timestamp: 2010-03-12 10:33:35 +0400 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1-bugteam/ # base_revision_id: joro@stripped # # Begin bundle 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 --Boundary_(ID_alJZMZFGl1ytGHDUPdC3kQ)--