diff --git a/mysql-test/r/symlink.result b/mysql-test/r/symlink.result index e7ee871b55b..20736aec47f 100644 --- a/mysql-test/r/symlink.result +++ b/mysql-test/r/symlink.result @@ -188,3 +188,28 @@ DROP TABLE user; FLUSH TABLE mysql.user; SELECT * FROM mysql.user; End of 5.1 tests +# +# Test for bug #11759990 - "52354: 'CREATE TABLE .. LIKE ... ' +# STATEMENTS FAIL". +# +drop table if exists t1, t2; +create table t1 (a int primary key) engine=myisam +data directory="MYSQLTEST_VARDIR/tmp" + index directory="MYSQLTEST_VARDIR/run"; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/run/' +# CREATE TABLE LIKE statement on table with INDEX/DATA DIRECTORY +# options should not fail. Per documentation newly created table +# should not inherit value of these options from the original table. +create table t2 like t1; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +drop tables t1, t2; diff --git a/mysql-test/t/symlink.test b/mysql-test/t/symlink.test index 87b874bc81f..5109137e564 100644 --- a/mysql-test/t/symlink.test +++ b/mysql-test/t/symlink.test @@ -277,3 +277,24 @@ SELECT * FROM mysql.user; --remove_file $MYSQL_TMP_DIR/mysql --echo End of 5.1 tests + + +--echo # +--echo # Test for bug #11759990 - "52354: 'CREATE TABLE .. LIKE ... ' +--echo # STATEMENTS FAIL". +--echo # +--disable_warnings +drop table if exists t1, t2; +--enable_warnings +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval create table t1 (a int primary key) engine=myisam + data directory="$MYSQLTEST_VARDIR/tmp" + index directory="$MYSQLTEST_VARDIR/run"; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t1; +--echo # CREATE TABLE LIKE statement on table with INDEX/DATA DIRECTORY +--echo # options should not fail. Per documentation newly created table +--echo # should not inherit value of these options from the original table. +create table t2 like t1; +show create table t2; +drop tables t1, t2; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index a5cc386d740..7576ad3b7b3 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4582,6 +4582,11 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table, local_create_info.options|= create_info->options & HA_LEX_CREATE_TMP_TABLE; /* Reset auto-increment counter for the new table. */ local_create_info.auto_increment_value= 0; + /* + Do not inherit values of DATA and INDEX DIRECTORY options from + the original table. This is documented behavior. + */ + local_create_info.data_file_name= local_create_info.index_file_name= NULL; if ((res= mysql_create_table_no_lock(thd, table->db, table->table_name, &local_create_info, &local_alter_info,