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#21392 | kgeorge | 4 Sep |