Commit 2b548fe9 authored by unknown's avatar unknown
Browse files

Bug#10413 - Invalid column name is not rejected

  Stop ignoring name parts and check for validity


mysql-test/r/create.result:
  Test for bug#10413
mysql-test/t/create.test:
  Test for bug#10413
sql/sql_yacc.yy:
  Bug#10413
    Stop ignoring parts of fully qualified names.
parent 25841aa9
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -563,3 +563,12 @@ select * from t2;
b
1
drop table t1,t2;
create table t1(column.name int);
ERROR 42000: Incorrect table name 'column'
create table t1(test.column.name int);
ERROR 42000: Incorrect table name 'column'
create table t1(xyz.t1.name int);
ERROR 42000: Incorrect database name 'xyz'
create table t1(t1.name int);
create table t2(test.t2.name int);
drop table t1,t2;
+13 −0
Original line number Diff line number Diff line
@@ -460,3 +460,16 @@ insert into t2 values ();
select * from t1;
select * from t2;
drop table t1,t2;

#
# Bug#10413: Invalid column name is not rejected
#
--error 1103
create table t1(column.name int);
--error 1103
create table t1(test.column.name int);
--error 1102
create table t1(xyz.t1.name int);
create table t1(t1.name int);
create table t2(test.t2.name int);
drop table t1,t2;
+25 −1
Original line number Diff line number Diff line
@@ -5016,7 +5016,31 @@ simple_ident:

field_ident:
	ident			{ $$=$1;}
	| ident '.' ident	{ $$=$3;}	/* Skip schema name in create*/
	| ident '.' ident '.' ident
          {
            TABLE_LIST *table= (TABLE_LIST*) Select->table_list.first;
            if (my_strcasecmp(table_alias_charset, $1.str, table->db))
            {
              net_printf(YYTHD, ER_WRONG_DB_NAME, $1.str);
              YYABORT;
            }
            if (my_strcasecmp(table_alias_charset, $3.str, table->real_name))
            {
              net_printf(YYTHD, ER_WRONG_TABLE_NAME, $3.str);
              YYABORT;
            }
            $$=$5;
          }
	| ident '.' ident
          {
            TABLE_LIST *table= (TABLE_LIST*) Select->table_list.first;
            if (my_strcasecmp(table_alias_charset, $1.str, table->alias))
            {
              net_printf(YYTHD, ER_WRONG_TABLE_NAME, $1.str);
              YYABORT;
            }
            $$=$3;
          }
	| '.' ident		{ $$=$2;}	/* For Delphi */;

table_ident: