Commit 6c41a043 authored by unknown's avatar unknown

BUG#25106: A USING clause in combination with a VIEW results in column

           aliases ignored
When a column reference to a column in JOIN USING is resolved and a new 
Item is created for this column the user defined name was lost.
This fix preserves the alias by setting the name of the new Item to the
original alias.


mysql-test/r/join.result:
  BUG#25106: A USING clause in combination with a VIEW results in column
             aliases ignored
   - test case
mysql-test/t/join.test:
  BUG#25106: A USING clause in combination with a VIEW results in column
             aliases ignored
   - test case
sql/sql_base.cc:
  BUG#25106: A USING clause in combination with a VIEW results in column
             aliases ignored
   - take the alias of the Item to be replaced and set it into the newly
     allocated Item.
parent 42e31f7a
...@@ -764,3 +764,19 @@ natural join t5; ...@@ -764,3 +764,19 @@ natural join t5;
y c b a z y c b a z
1 3 2 1 4 1 3 2 1 4
drop table t1, t2, t3, t4, t5; drop table t1, t2, t3, t4, t5;
CREATE TABLE t1 (ID INTEGER, Name VARCHAR(50));
CREATE TABLE t2 (Test_ID INTEGER);
CREATE VIEW v1 (Test_ID, Description) AS SELECT ID, Name FROM t1;
CREATE TABLE tv1 SELECT Description AS Name FROM v1 JOIN t2
USING (Test_ID);
DESCRIBE tv1;
Field Type Null Key Default Extra
Name varchar(50) YES NULL
CREATE TABLE tv2 SELECT Description AS Name FROM v1 JOIN t2
ON v1.Test_ID = t2.Test_ID;
DESCRIBE tv2;
Field Type Null Key Default Extra
Name varchar(50) YES NULL
DROP VIEW v1;
DROP TABLE t1,t2,tv1,tv2;
End of 5.0 tests.
...@@ -591,3 +591,23 @@ select * from ((t3 natural join (t1 natural join t2)) natural join t4) ...@@ -591,3 +591,23 @@ select * from ((t3 natural join (t1 natural join t2)) natural join t4)
drop table t1, t2, t3, t4, t5; drop table t1, t2, t3, t4, t5;
# End of tests for WL#2486 - natural/using join # End of tests for WL#2486 - natural/using join
#
# BUG#25106: A USING clause in combination with a VIEW results in column
# aliases ignored
#
CREATE TABLE t1 (ID INTEGER, Name VARCHAR(50));
CREATE TABLE t2 (Test_ID INTEGER);
CREATE VIEW v1 (Test_ID, Description) AS SELECT ID, Name FROM t1;
CREATE TABLE tv1 SELECT Description AS Name FROM v1 JOIN t2
USING (Test_ID);
DESCRIBE tv1;
CREATE TABLE tv2 SELECT Description AS Name FROM v1 JOIN t2
ON v1.Test_ID = t2.Test_ID;
DESCRIBE tv2;
DROP VIEW v1;
DROP TABLE t1,t2,tv1,tv2;
--echo End of 5.0 tests.
...@@ -2977,6 +2977,19 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name, ...@@ -2977,6 +2977,19 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name,
column reference. See create_view_field() for details. column reference. See create_view_field() for details.
*/ */
item= nj_col->create_item(thd); item= nj_col->create_item(thd);
/*
*ref != NULL means that *ref contains the item that we need to
replace. If the item was aliased by the user, set the alias to
the replacing item.
We need to set alias on both ref itself and on ref real item.
*/
if (*ref && !(*ref)->is_autogenerated_name)
{
item->set_name((*ref)->name, (*ref)->name_length,
system_charset_info);
item->real_item()->set_name((*ref)->name, (*ref)->name_length,
system_charset_info);
}
if (register_tree_change && arena) if (register_tree_change && arena)
thd->restore_active_arena(arena, &backup); thd->restore_active_arena(arena, &backup);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment