Bug #34830 Item_ref & Item_direct_ref constructor call: mixed table & field names.
| Submitted: | 26 Feb 2008 12:20 | Modified: | 10 Apr 2008 13:54 |
|---|---|---|---|
| Reporter: | Gleb Shchepa | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 5.0+ | OS: | Any |
| Assigned to: | Gleb Shchepa | CPU Architecture: | Any |
[28 Feb 2008 22:34]
MySQL Verification Team
Thank you for the bug report. Verified as described in the feedback.
[29 Feb 2008 11:14]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/43212 ChangeSet@1.2592, 2008-02-29 15:11:11+04:00, gshchepa@host.loc +1 -0 Fixed bug #34830: mixed table and field names in Item_ref and Item_direct_ref constructor calls. Order of ref->field_name and ref->table_name arguments is of Item_ref and Item_direct_ref in the fix_inner_refs function is inverted.
[13 Mar 2008 19:27]
Bugs System
Pushed into 6.0.5-alpha
[13 Mar 2008 19:35]
Bugs System
Pushed into 5.1.24-rc
[13 Mar 2008 19:42]
Bugs System
Pushed into 5.0.60
[3 Apr 2008 14:59]
Jon Stephens
Pushed into 5.1.23-ndb-6.3.11.
[10 Apr 2008 13:54]
Paul DuBois
Noted in 5.0.60, 5.1.24, 5.1.24-ndb-6.3.13, 6.0.5 changelogs. Table and database names were mixed up in some places of the subquery transformation procedure. This could affect debugging trace output and further extensions of that procedure.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.072 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: sql/sql_select.cc: ------------------ bool fix_inner_refs(THD *thd, List<Item> &all_fields, SELECT_LEX *select, Item **ref_pointer_array) { ... new_ref= direct_ref ? new Item_direct_ref(ref->context, item_ref, ref->field_name, ^^^^^^^^^^^^^^^^ ref->table_name, ref->alias_name_used) : ^^^^^^^^^^^^^^^^ new Item_ref(ref->context, item_ref, ref->field_name, ^^^^^^^^^^^^^^^^ ref->table_name, ref->alias_name_used); ^^^^^^^^^^^^^^^^ ... Order of ref->field_name and ref->table_name arguments should be changes because or definition of Item_ref and Item_direct_ref constructors (sql/item.h): 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); and Item_direct_ref(Name_resolution_context *context_arg, Item **item, const char *table_name_arg, ^^^^^^^^^^^^^^ const char *field_name_arg, ^^^^^^^^^^^^^^ bool alias_name_used_arg= FALSE) How to repeat: No good idea at this moment, but the bug is visible in the debugger when I trace such queries as: CREATE TABLE t1 (a INT, b INT); SELECT ROW(1, a) IN (SELECT SUM(b), 2) FROM t1 GROUP BY a; and place breakpoint at 'Item_direct_ref::Item_direct_ref(Name_resolution_context*, Item**, char const*, char const*, bool)' (gdb) p table_name_arg $1 = 0x86da393 "b" # Should be "t1" (gdb) p field_name_arg $2 = 0x871dfa0 "t1" # Should be "b" Suggested fix: ===== sql_select.cc 1.558 vs edited ===== --- 1.558/sql/sql_select.cc 2008-01-27 09:45:30 +04:00 +++ edited/sql/sql_select.cc 2008-02-26 16:12:25 +04:00 @@ -360,10 +360,10 @@ fix_inner_refs(THD *thd, List<Item> &all } } new_ref= direct_ref ? - new Item_direct_ref(ref->context, item_ref, ref->field_name, - ref->table_name, ref->alias_name_used) : - new Item_ref(ref->context, item_ref, ref->field_name, - ref->table_name, ref->alias_name_used); + new Item_direct_ref(ref->context, item_ref, ref->table_name, + ref->field_name, ref->alias_name_used) : + new Item_ref(ref->context, item_ref, ref->table_name, + ref->field_name, ref->alias_name_used); if (!new_ref) return TRUE; ref->outer_ref= new_ref;