List:Commits« Previous MessageNext Message »
From:dlenev Date:January 24 2007 7:43am
Subject:bk commit into 5.1 tree (dlenev:1.2411)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of dlenev. When dlenev 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-24 10:42:57+03:00, dlenev@stripped +7 -0
  Merge mockturtle.local:/home/dlenev/src/mysql-5.0-bg24491
  into  mockturtle.local:/home/dlenev/src/mysql-5.1-bg24491
  MERGE: 1.1810.2368.71

  mysql-test/r/ps.result@stripped, 2007-01-24 10:42:55+03:00, dlenev@stripped +0 -0
    SCCS merged
    MERGE: 1.56.1.32

  mysql-test/r/sp-error.result@stripped, 2007-01-24 10:42:55+03:00, dlenev@stripped +0 -0
    SCCS merged
    MERGE: 1.102.1.8

  mysql-test/t/disabled.def@stripped, 2007-01-24 10:42:55+03:00, dlenev@stripped +0 -0
    SCCS merged
    MERGE: 1.2.4.19

  mysql-test/t/ps.test@stripped, 2007-01-24 10:42:55+03:00, dlenev@stripped +0 -0
    SCCS merged
    MERGE: 1.56.1.30

  mysql-test/t/sp-error.test@stripped, 2007-01-24 10:34:51+03:00, dlenev@stripped +0 -0
    Auto merged
    MERGE: 1.100.1.11

  sql/item.h@stripped, 2007-01-24 10:34:51+03:00, dlenev@stripped +0 -0
    Auto merged
    MERGE: 1.183.1.33

  sql/sql_table.cc@stripped, 2007-01-24 10:34:51+03:00, dlenev@stripped +0 -0
    Auto merged
    MERGE: 1.239.1.93

# 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:	dlenev
# Host:	mockturtle.local
# Root:	/home/dlenev/src/mysql-5.1-bg24491/RESYNC

--- 1.219/sql/item.h	2007-01-24 10:43:04 +03:00
+++ 1.220/sql/item.h	2007-01-24 10:43:04 +03:00
@@ -336,23 +336,18 @@ public:
   {
     save_table_list=                  context->table_list;
     save_first_name_resolution_table= context->first_name_resolution_table;
-    save_next_name_resolution_table=  (context->first_name_resolution_table) ?
-                                      context->first_name_resolution_table->
-                                               next_name_resolution_table :
-                                      NULL;
     save_resolve_in_select_list=      context->resolve_in_select_list;
     save_next_local=                  table_list->next_local;
+    save_next_name_resolution_table=  table_list->next_name_resolution_table;
   }
 
   /* Restore a name resolution context from saved state. */
   void restore_state(Name_resolution_context *context, TABLE_LIST *table_list)
   {
     table_list->next_local=                save_next_local;
+    table_list->next_name_resolution_table= save_next_name_resolution_table;
     context->table_list=                   save_table_list;
     context->first_name_resolution_table=  save_first_name_resolution_table;
-    if (context->first_name_resolution_table)
-      context->first_name_resolution_table->
-               next_name_resolution_table= save_next_name_resolution_table;
     context->resolve_in_select_list=       save_resolve_in_select_list;
   }
 };

--- 1.118/mysql-test/r/sp-error.result	2007-01-24 10:43:04 +03:00
+++ 1.119/mysql-test/r/sp-error.result	2007-01-24 10:43:04 +03:00
@@ -1250,6 +1250,25 @@ ERROR HY000: View's SELECT contains a va
 PREPARE stmt FROM "CREATE VIEW v AS SELECT ?";
 ERROR HY000: View's SELECT contains a variable or parameter
 DROP TABLE t1;
+drop tables if exists t1;
+drop procedure if exists bug24491;
+create table t1 (id int primary key auto_increment, value varchar(10));
+insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD');
+create procedure bug24491()
+insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP';
+call bug24491();
+ERROR 42S22: Unknown column 'v' in 'field list'
+call bug24491();
+ERROR 42S22: Unknown column 'v' in 'field list'
+drop procedure bug24491;
+create procedure bug24491()
+insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP';
+call bug24491();
+ERROR 42S22: Unknown column 'y.value' in 'field list'
+call bug24491();
+ERROR 42S22: Unknown column 'y.value' in 'field list'
+drop procedure bug24491;
+drop tables t1;
 End of 5.0 tests
 drop function if exists bug16164;
 create function bug16164() returns int

--- 1.115/mysql-test/t/sp-error.test	2007-01-24 10:43:04 +03:00
+++ 1.116/mysql-test/t/sp-error.test	2007-01-24 10:43:04 +03:00
@@ -1854,6 +1854,38 @@ drop function bug20701;
 --echo End of 5.1 tests
 
 #
+# BUG#24491 "using alias from source table in insert ... on duplicate key"
+#
+--disable_warnings
+drop tables if exists t1;
+drop procedure if exists bug24491;
+--enable_warnings
+create table t1 (id int primary key auto_increment, value varchar(10));
+insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD');
+# Let us create routine with INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 
+# statement which in its ON DUPLICATE KEY clause erroneously tries to assign
+# value to a column which is mentioned only in SELECT part.
+create procedure bug24491()
+  insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP';
+# Both first and second calls to it should fail
+--error ER_BAD_FIELD_ERROR 
+call bug24491();
+--error ER_BAD_FIELD_ERROR
+call bug24491();
+drop procedure bug24491;
+# And now the same test for more complex case which is more close
+# to the one that was reported originally.
+create procedure bug24491()
+  insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP';
+--error ER_BAD_FIELD_ERROR 
+call bug24491();
+--error ER_BAD_FIELD_ERROR
+call bug24491();
+drop procedure bug24491;
+drop tables t1;
+
+
+#
 # BUG#NNNN: New bug synopsis
 #
 #--disable_warnings

--- 1.99/mysql-test/r/ps.result	2007-01-24 10:43:04 +03:00
+++ 1.100/mysql-test/r/ps.result	2007-01-24 10:43:04 +03:00
@@ -1544,6 +1544,22 @@ a
 2
 DEALLOCATE PREPARE stmt;
 DROP TABLE t1,t2;
+drop tables if exists t1;
+create table t1 (id int primary key auto_increment, value varchar(10));
+insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD');
+prepare stmt from "insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP'";
+execute stmt;
+ERROR 42S22: Unknown column 'v' in 'field list'
+execute stmt;
+ERROR 42S22: Unknown column 'v' in 'field list'
+deallocate prepare stmt;
+prepare stmt from "insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP'";
+execute stmt;
+ERROR 42S22: Unknown column 'y.value' in 'field list'
+execute stmt;
+ERROR 42S22: Unknown column 'y.value' in 'field list'
+deallocate prepare stmt;
+drop tables t1;
 End of 5.0 tests.
 create procedure proc_1() reset query cache;
 call proc_1();

--- 1.100/mysql-test/t/ps.test	2007-01-24 10:43:04 +03:00
+++ 1.101/mysql-test/t/ps.test	2007-01-24 10:43:04 +03:00
@@ -1576,6 +1576,7 @@ execute sq;
 deallocate prepare no_index;
 deallocate prepare sq;
 
+
 #
 # Bug 25027: query with a single-row non-correlated subquery
 #            and IS NULL predicate
@@ -1598,6 +1599,36 @@ EXECUTE stmt USING @arg;
 DEALLOCATE PREPARE stmt;
 
 DROP TABLE t1,t2;
+
+
+#
+# BUG#24491 "using alias from source table in insert ... on duplicate key"
+#
+--disable_warnings
+drop tables if exists t1;
+--enable_warnings
+create table t1 (id int primary key auto_increment, value varchar(10));
+insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD');
+# Let us prepare INSERT ... SELECT ... ON DUPLICATE KEY UPDATE statement
+# which in its ON DUPLICATE KEY clause erroneously tries to assign value
+# to a column which is mentioned only in SELECT part.
+prepare stmt from "insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP'";
+# Both first and second attempts to execute it should fail
+--error ER_BAD_FIELD_ERROR 
+execute stmt;
+--error ER_BAD_FIELD_ERROR
+execute stmt;
+deallocate prepare stmt;
+# And now the same test for more complex case which is more close
+# to the one that was reported originally.
+prepare stmt from "insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP'";
+--error ER_BAD_FIELD_ERROR 
+execute stmt;
+--error ER_BAD_FIELD_ERROR
+execute stmt;
+deallocate prepare stmt;
+drop tables t1;
+
 
 --echo End of 5.0 tests.
 
Thread
bk commit into 5.1 tree (dlenev:1.2411)dlenev24 Jan