Loading mysql-test/r/delete.result +4 −0 Original line number Diff line number Diff line Loading @@ -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; mysql-test/t/delete.test +10 −0 Original line number Diff line number Diff line Loading @@ -153,4 +153,14 @@ DELETE FROM t1 WHERE t1.a > 0 ORDER BY t1.a LIMIT 1; 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 sql/mysql_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -305,6 +305,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout); #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 */ Loading sql/sql_parse.cc +3 −1 Original line number Diff line number Diff line Loading @@ -4863,6 +4863,7 @@ bool add_to_list(THD *thd, SQL_LIST &list,Item *item,bool asc) 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 Loading @@ -4888,7 +4889,8 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, 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); Loading sql/sql_yacc.yy +5 −2 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading
mysql-test/r/delete.result +4 −0 Original line number Diff line number Diff line Loading @@ -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;
mysql-test/t/delete.test +10 −0 Original line number Diff line number Diff line Loading @@ -153,4 +153,14 @@ DELETE FROM t1 WHERE t1.a > 0 ORDER BY t1.a LIMIT 1; 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
sql/mysql_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -305,6 +305,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout); #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 */ Loading
sql/sql_parse.cc +3 −1 Original line number Diff line number Diff line Loading @@ -4863,6 +4863,7 @@ bool add_to_list(THD *thd, SQL_LIST &list,Item *item,bool asc) 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 Loading @@ -4888,7 +4889,8 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, 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); Loading
sql/sql_yacc.yy +5 −2 Original line number Diff line number Diff line Loading @@ -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; } Loading