Loading mysql-test/r/create_not_windows.result +17 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,20 @@ about:text CREATE TABLE `about:text` ( PRIMARY KEY (`_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table `about:text`; use test; drop table if exists t1; create table t1(a int) engine=myisam; insert into t1 values(1); "We get an error because the table is in the definition cache" create table t1(a int, b int); ERROR 42S01: Table 't1' already exists "Flush the cache and recreate the table anew to be able to drop it" flush tables; show open tables like "t%"; Database Table In_use Name_locked create table t1(a int, b int, c int); "Try to select from the table. This should not crash the server" select count(a) from t1; count(a) 0 drop table t1; mysql-test/t/create_not_windows.test +21 −0 Original line number Diff line number Diff line Loading @@ -18,3 +18,24 @@ show create table `about:text`; drop table `about:text`; # End of 5.0 tests # # Bug#16532:mysql server assert in debug if table det is removed # use test; --disable_warnings drop table if exists t1; --enable_warnings create table t1(a int) engine=myisam; insert into t1 values(1); --system rm -f $MYSQLTEST_VARDIR/master-data/test/t1.frm --echo "We get an error because the table is in the definition cache" --error ER_TABLE_EXISTS_ERROR create table t1(a int, b int); --echo "Flush the cache and recreate the table anew to be able to drop it" flush tables; show open tables like "t%"; create table t1(a int, b int, c int); --echo "Try to select from the table. This should not crash the server" select count(a) from t1; drop table t1; sql/sql_table.cc +13 −1 Original line number Diff line number Diff line Loading @@ -3321,7 +3321,19 @@ bool mysql_create_table_internal(THD *thd, my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name); goto unlock_and_end; } DBUG_ASSERT(get_cached_table_share(db, alias) == 0); /* We don't assert here, but check the result, because the table could be in the table definition cache and in the same time the .frm could be missing from the disk, in case of manual intervention which deletes the .frm file. The user has to use FLUSH TABLES; to clear the cache. Then she could create the table. This case is pretty obscure and therefore we don't introduce a new error message only for it. */ if (get_cached_table_share(db, alias)) { my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name); goto unlock_and_end; } } /* Loading Loading
mysql-test/r/create_not_windows.result +17 −0 Original line number Diff line number Diff line Loading @@ -12,3 +12,20 @@ about:text CREATE TABLE `about:text` ( PRIMARY KEY (`_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table `about:text`; use test; drop table if exists t1; create table t1(a int) engine=myisam; insert into t1 values(1); "We get an error because the table is in the definition cache" create table t1(a int, b int); ERROR 42S01: Table 't1' already exists "Flush the cache and recreate the table anew to be able to drop it" flush tables; show open tables like "t%"; Database Table In_use Name_locked create table t1(a int, b int, c int); "Try to select from the table. This should not crash the server" select count(a) from t1; count(a) 0 drop table t1;
mysql-test/t/create_not_windows.test +21 −0 Original line number Diff line number Diff line Loading @@ -18,3 +18,24 @@ show create table `about:text`; drop table `about:text`; # End of 5.0 tests # # Bug#16532:mysql server assert in debug if table det is removed # use test; --disable_warnings drop table if exists t1; --enable_warnings create table t1(a int) engine=myisam; insert into t1 values(1); --system rm -f $MYSQLTEST_VARDIR/master-data/test/t1.frm --echo "We get an error because the table is in the definition cache" --error ER_TABLE_EXISTS_ERROR create table t1(a int, b int); --echo "Flush the cache and recreate the table anew to be able to drop it" flush tables; show open tables like "t%"; create table t1(a int, b int, c int); --echo "Try to select from the table. This should not crash the server" select count(a) from t1; drop table t1;
sql/sql_table.cc +13 −1 Original line number Diff line number Diff line Loading @@ -3321,7 +3321,19 @@ bool mysql_create_table_internal(THD *thd, my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name); goto unlock_and_end; } DBUG_ASSERT(get_cached_table_share(db, alias) == 0); /* We don't assert here, but check the result, because the table could be in the table definition cache and in the same time the .frm could be missing from the disk, in case of manual intervention which deletes the .frm file. The user has to use FLUSH TABLES; to clear the cache. Then she could create the table. This case is pretty obscure and therefore we don't introduce a new error message only for it. */ if (get_cached_table_share(db, alias)) { my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name); goto unlock_and_end; } } /* Loading