MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:kgeorge Date:September 4 2006 3:40pm
Subject:bk commit into 4.1 tree (gkodinov:1.2534) BUG#21392
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 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, 2006-09-04 18:40:30+03:00, gkodinov@stripped +5 -0
  Bug #21392: multi-table delete with alias table name fails with
              1003: Incorrect table name
  in multi-table DELETE the set of tables to delete from actually 
  references then tables in the other list, e.g:
  DELETE alias_of_t1 FROM t1 alias_of_t1 WHERE ....
  is a valid statement.
  So we must turn off table name syntactical validity check for alias_of_t1 
  because it's not a table name (even if it looks like one).
  In order to do that we add a special flag (TL_OPTION_ALIAS) to 
  disable the name checking for the aliases in multi-table DELETE.

  mysql-test/r/delete.result@stripped, 2006-09-04 18:40:20+03:00, gkodinov@stripped +4 -0
    Bug #21392: multi-table delete with alias table name fails with
                1003: Incorrect table name
     - test case

  mysql-test/t/delete.test@stripped, 2006-09-04 18:40:20+03:00, gkodinov@stripped +10 -0
    Bug #21392: multi-table delete with alias table name fails with
                1003: Incorrect table name
     - test case

  sql/mysql_priv.h@stripped, 2006-09-04 18:40:21+03:00, gkodinov@stripped +1 -0
    Bug #21392: multi-table delete with alias table name fails with
                1003: Incorrect table name
     - add a special flag to disable the name checking for the aliases
       in multi-table DELETE

  sql/sql_parse.cc@stripped, 2006-09-04 18:40:22+03:00, gkodinov@stripped +3 -1
    Bug #21392: multi-table delete with alias table name fails with
                1003: Incorrect table name
     - add a special flag to disable the name checking for the aliases
       in multi-table DELETE

  sql/sql_yacc.yy@stripped, 2006-09-04 18:40:23+03:00, gkodinov@stripped +5 -2
    Bug #21392: multi-table delete with alias table name fails with
                1003: Incorrect table name
     - add a special flag to disable the name checking for the aliases
       in multi-table DELETE

# 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/B21392-4.1-opt

--- 1.380/sql/mysql_priv.h	2006-09-04 18:40:43 +03:00
+++ 1.381/sql/mysql_priv.h	2006-09-04 18:40:43 +03:00
@@ -305,6 +305,7 @@ void debug_sync_point(const char* lock_n
 #define TL_OPTION_UPDATING	1
 #define TL_OPTION_FORCE_INDEX	2
 #define TL_OPTION_IGNORE_LEAVES 4
+#define TL_OPTION_ALIAS         8
 
 /* Some portable defines */
 

--- 1.485/sql/sql_parse.cc	2006-09-04 18:40:43 +03:00
+++ 1.486/sql/sql_parse.cc	2006-09-04 18:40:43 +03:00
@@ -4863,6 +4863,7 @@ bool add_to_list(THD *thd, SQL_LIST &lis
     table_options	A set of the following bits:
 			TL_OPTION_UPDATING	Table will be updated
 			TL_OPTION_FORCE_INDEX	Force usage of index
+			TL_OPTION_ALIAS	        an alias in multi table DELETE
     lock_type		How table should be locked
     use_index		List of indexed used in USE INDEX
     ignore_index	List of indexed used in IGNORE INDEX
@@ -4888,7 +4889,8 @@ TABLE_LIST *st_select_lex::add_table_to_
   if (!table)
     DBUG_RETURN(0);				// End of memory
   alias_str= alias ? alias->str : table->table.str;
-  if (check_table_name(table->table.str,table->table.length) ||
+  if (!test(table_options & TL_OPTION_ALIAS) &&
+       check_table_name(table->table.str,table->table.length) ||
       table->db.str && check_db_name(table->db.str))
   {
     net_printf(thd, ER_WRONG_TABLE_NAME, table->table.str);

--- 1.398/sql/sql_yacc.yy	2006-09-04 18:40:43 +03:00
+++ 1.399/sql/sql_yacc.yy	2006-09-04 18:40:43 +03:00
@@ -4345,14 +4345,17 @@ table_wild_one:
 	ident opt_wild opt_table_alias
 	{
 	  if (!Select->add_table_to_list(YYTHD, new Table_ident($1), $3,
-					 TL_OPTION_UPDATING, Lex->lock_option))
+					 TL_OPTION_UPDATING | 
+                                         TL_OPTION_ALIAS, Lex->lock_option))
 	    YYABORT;
         }
 	| ident '.' ident opt_wild opt_table_alias
 	  {
 	    if (!Select->add_table_to_list(YYTHD,
 					   new Table_ident(YYTHD, $1, $3, 0),
-					   $5, TL_OPTION_UPDATING,
+					   $5, 
+                                           TL_OPTION_UPDATING | 
+                                           TL_OPTION_ALIAS,
 					   Lex->lock_option))
 	      YYABORT;
 	  }

--- 1.20/mysql-test/t/delete.test	2006-09-04 18:40:43 +03:00
+++ 1.21/mysql-test/t/delete.test	2006-09-04 18:40:43 +03:00
@@ -153,4 +153,14 @@ DELETE FROM t1 WHERE t1.a > 0 ORDER BY t
 SELECT * FROM t1;
 DROP TABLE t1;
 
+#
+# Bug #21392: multi-table delete with alias table name fails with 
+# 1003: Incorrect table name
+#
+
+create table t1 (a int);
+delete `4.t1` from t1 as `4.t1` where `4.t1`.a = 5;
+delete FROM `4.t1` USING t1 as `4.t1` where `4.t1`.a = 5;
+drop table t1;
+
 # End of 4.1 tests

--- 1.21/mysql-test/r/delete.result	2006-09-04 18:40:44 +03:00
+++ 1.22/mysql-test/r/delete.result	2006-09-04 18:40:44 +03:00
@@ -172,3 +172,7 @@ a
 0
 2
 DROP TABLE t1;
+create table t1 (a int);
+delete `4.t1` from t1 as `4.t1` where `4.t1`.a = 5;
+delete FROM `4.t1` USING t1 as `4.t1` where `4.t1`.a = 5;
+drop table t1;
Thread
bk commit into 4.1 tree (gkodinov:1.2534) BUG#21392kgeorge4 Sep