List:Commits« Previous MessageNext Message »
From:kgeorge Date:January 11 2007 6:10pm
Subject:bk commit into 5.0 tree (gkodinov:1.2367) BUG#25106
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of kgeorge. When kgeorge does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-01-11 19:10:01+02:00, gkodinov@stripped +3 -0
  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@stripped, 2007-01-11 19:09:55+02:00, gkodinov@stripped +16 -0
    BUG#25106: A USING clause in combination with a VIEW results in column
               aliases ignored
     - test case

  mysql-test/t/join.test@stripped, 2007-01-11 19:09:56+02:00, gkodinov@stripped +20 -0
    BUG#25106: A USING clause in combination with a VIEW results in column
               aliases ignored
     - test case

  sql/sql_base.cc@stripped, 2007-01-11 19:09:56+02:00, gkodinov@stripped +13 -0
    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.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	gkodinov
# Host:	macbook.gmz
# Root:	/Users/kgeorge/mysql/work/B25106-5.0-opt

--- 1.360/sql/sql_base.cc	2006-12-30 22:02:07 +02:00
+++ 1.361/sql/sql_base.cc	2007-01-11 19:09:56 +02:00
@@ -2977,6 +2977,19 @@ find_field_in_natural_join(THD *thd, TAB
       column reference. See create_view_field() for details.
     */
     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)
       thd->restore_active_arena(arena, &backup);
 

--- 1.39/mysql-test/r/join.result	2006-11-13 18:06:41 +02:00
+++ 1.40/mysql-test/r/join.result	2007-01-11 19:09:55 +02:00
@@ -764,3 +764,19 @@ natural join t5;
 y	c	b	a	z
 1	3	2	1	4
 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.

--- 1.34/mysql-test/t/join.test	2006-12-08 13:20:23 +02:00
+++ 1.35/mysql-test/t/join.test	2007-01-11 19:09:56 +02:00
@@ -591,3 +591,23 @@ select * from ((t3 natural join (t1 natu
 drop table t1, t2, t3, t4, t5;
 
 # 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.
Thread
bk commit into 5.0 tree (gkodinov:1.2367) BUG#25106kgeorge11 Jan