1# 2# WL#6205 - A series of tests to show the correct behavior for 3# CREATE TABLESPACE and associated SQL statements. 4# 5--source include/have_innodb.inc 6 7--echo # 8--echo # CREATE TABLESPACE related tests. 9--echo # 10 11SET DEFAULT_STORAGE_ENGINE=InnoDB; 12SET NAMES utf8; 13LET $MYSQLD_DATADIR = `select @@datadir`; 14LET $INNODB_PAGE_SIZE = `select @@innodb_page_size`; 15 16--echo # Strict-mode has no effect on CREATE TABLESPACE. 17--echo # It rejects all invalid input, as if strict mode is always ON. 18SHOW VARIABLES LIKE 'innodb_strict_mode'; 19 20--echo # Neither file_format=antelope nor file_per_table=OFF will prevent 21--echo # CREATE TABLESPACE from working because the tablespace is an empty 22--echo # shell that can contain multiple row formats. 23SET GLOBAL innodb_file_format = 'antelope'; 24SHOW VARIABLES LIKE 'innodb_file_format'; 25SHOW VARIABLES LIKE 'innodb_file_per_table'; 26 27--echo # 28--echo # Try to create a tablespace without specifying the name 29--echo # 30--error ER_PARSE_ERROR 31CREATE TABLESPACE; 32 33--echo # 34--echo # Try to create a tablespace without specifying the datafile 35--echo # 36--error ER_PARSE_ERROR 37CREATE TABLESPACE s_bad; 38 39--echo # 40--echo # Try to create a tablespace with bad characters in the tablespace name identifier. 41--echo # 42# From; http://dev.mysql.com/doc/refman/5.7/en/identifiers.html 43# An identifier must be either unquoted or quoted with (`). 44# Identifiers are converted to Unicode internally. They may contain these characters: 45# Permitted characters in unquoted identifiers: 46# ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore) 47# Extended: U+0080 .. U+FFFF 48# Permitted characters in quoted identifiers include the full Unicode Basic Multilingual Plane (BMP), except U+0000: 49# ASCII: U+0001 .. U+007F 50# Extended: U+0080 .. U+FFFF 51# ASCII NUL (U+0000) and supplementary characters (U+10000 and higher) are not permitted in quoted or unquoted identifiers. 52# Identifiers may begin with a digit but unless quoted may not consist solely of digits. 53# Database, table, and column names cannot end with space characters. 54# The identifier quote character is the backtick (`) 55 56--error ER_PARSE_ERROR 57CREATE TABLESPACE 's_bad' ADD DATAFILE 's_bad.ibd'; 58--error ER_PARSE_ERROR 59CREATE TABLESPACE "s_bad" ADD DATAFILE 's_bad.ibd'; 60--error ER_WRONG_TABLESPACE_NAME 61CREATE TABLESPACE `` ADD DATAFILE 's_bad.ibd'; 62--error ER_PARSE_ERROR 63CREATE TABLESPACE s#bad ADD DATAFILE 's_bad.ibd'; 64--error ER_PARSE_ERROR 65CREATE TABLESPACE s@bad ADD DATAFILE 's_bad.ibd'; 66--error ER_PARSE_ERROR 67CREATE TABLESPACE s-bad ADD DATAFILE 's_bad.ibd'; 68--error ER_PARSE_ERROR 69CREATE TABLESPACE test/s_bad ADD DATAFILE 's_bad.ibd'; 70--error ER_WRONG_TABLESPACE_NAME 71CREATE TABLESPACE `test/s_bad` ADD DATAFILE 's_bad.ibd'; 72LET $TWOFIFTYFIVE=../xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; 73--error ER_CREATE_FILEGROUP_FAILED 74eval CREATE TABLESPACE `s_too_long_file_name` ADD DATAFILE '$TWOFIFTYFIVE.ibd'; 75--error ER_FILEGROUP_OPTION_ONLY_ONCE 76CREATE TABLESPACE s_bad ADD DATAFILE 's_bad.ibd' FILE_BLOCK_SIZE=1k FILE_BLOCK_SIZE=2k; 77--error ER_ILLEGAL_HA_CREATE_OPTION 78CREATE TABLESPACE s_bad ADD DATAFILE 's_bad.ibd' FILE_BLOCK_SIZE=3k; 79--error ER_ILLEGAL_HA_CREATE_OPTION 80CREATE TABLESPACE s_bad ADD DATAFILE 's_bad.ibd' FILE_BLOCK_SIZE=65k; 81--error ER_WRONG_FILE_NAME 82CREATE TABLESPACE `s_bad` ADD DATAFILE 'sub/dir/////s_bad.ibd'; 83SHOW WARNINGS; 84# Show that those directories were not created. 85--mkdir $MYSQLD_DATADIR/sub 86--mkdir $MYSQLD_DATADIR/sub/dir 87--rmdir $MYSQLD_DATADIR/sub/dir 88--rmdir $MYSQLD_DATADIR/sub 89 90--error ER_PARSE_ERROR 91DROP TABLESPACE 's_bad'; 92--error ER_PARSE_ERROR 93DROP TABLESPACE "s_bad"; 94--error ER_WRONG_TABLESPACE_NAME 95DROP TABLESPACE ``; 96SHOW WARNINGS; 97--error ER_DROP_FILEGROUP_FAILED 98DROP TABLESPACE s#bad; 99--error ER_PARSE_ERROR 100DROP TABLESPACE s@bad; 101--error ER_PARSE_ERROR 102DROP TABLESPACE s-bad; 103--error ER_WRONG_TABLESPACE_NAME 104DROP TABLESPACE `test/s_bad`; 105--error ER_DROP_FILEGROUP_FAILED 106DROP TABLESPACE s_does_not_exist; 107SHOW WARNINGS; 108 109 110--echo # 111--echo # InnoDB does not allow General tablespace names with '/' 112--echo # 113--error ER_WRONG_TABLESPACE_NAME 114CREATE TABLESPACE `test/s_bad` ADD DATAFILE 's_bad.ibd'; 115SHOW WARNINGS; 116 117# When identifiers are quoted, most anything is allowed. 118# Table names cannot have a trailing space, but tablespaces can. 119CREATE TABLESPACE `s_ !@#$%^&*()_+-={}[]|\?<>,. ` ADD DATAFILE 's_utf8.ibd'; 120CREATE TABLE `t !@#$%^&*()_+-={}[]|\?<>,.` (a int, b text) TABLESPACE `s_ !@#$%^&*()_+-={}[]|\?<>,. `; 121INSERT INTO `t !@#$%^&*()_+-={}[]|\?<>,.` VALUES(1,'one'); 122SHOW CREATE TABLE `t !@#$%^&*()_+-={}[]|\?<>,.`; 123CREATE TABLE `t !@#$%^&*()_+-={}[]|\?<>,.2` ( 124 `a` int(11) DEFAULT NULL, 125 `b` text 126) /*!50100 TABLESPACE `s_ !@#$%^&*()_+-={}[]|\?<>,. ` */ ENGINE=InnoDB DEFAULT CHARSET=latin1; 127SHOW CREATE TABLE `t !@#$%^&*()_+-={}[]|\?<>,.`; 128DROP TABLE `t !@#$%^&*()_+-={}[]|\?<>,.2`; 129 130CREATE TABLESPACE `#sql_1` ADD DATAFILE '#sql_1.ibd'; 131CREATE TABLE `#sql_1` (a int, b text) TABLESPACE `#sql_1`; 132INSERT INTO `#sql_1` VALUES(1,'one'); 133SHOW CREATE TABLE `#sql_1`; 134 135CREATE TABLESPACE `s_Cöŀumň` ADD DATAFILE 's_utf8_a.ibd'; 136CREATE TABLE `t_utf8_1` (a int, b text) TABLESPACE `s_Cöŀumň`; 137SHOW CREATE TABLE `t_utf8_1`; 138 139CREATE TABLESPACE `s_cöĿǖmň` ADD DATAFILE 's_utf8_b.ibd'; 140CREATE TABLE `t_utf8_2` (a int, b text) TABLESPACE `s_cöĿǖmň`; 141SHOW CREATE TABLE `t_utf8_2`; 142 143--error ER_INVALID_CHARACTER_STRING 144CREATE TABLESPACE `s_` ADD DATAFILE 's_utf8_c.ibd'; 145--error ER_INVALID_CHARACTER_STRING 146CREATE TABLESPACE `s_` ADD DATAFILE 's_utf8_d.ibd'; 147 148CREATE TABLESPACE `s_வணக்கம்` ADD DATAFILE 'ஆவணம்.ibd'; 149CREATE TABLE `t_utf8_3` (a int, b text) TABLESPACE `s_வணக்கம்`; 150SHOW CREATE TABLE `t_utf8_3`; 151 152--source suite/innodb/include/show_i_s_tablespaces.inc 153--source suite/innodb/include/show_i_s_tables.inc 154--echo # Directory listing of MYSQLD_DATADIR/ 155--list_files $MYSQLD_DATADIR *.ibd 156 157CHECK TABLE `t !@#$%^&*()_+-={}[]|\?<>,.`; 158DROP TABLE `t !@#$%^&*()_+-={}[]|\?<>,.`; 159DROP TABLESPACE `s_ !@#$%^&*()_+-={}[]|\?<>,. `; 160CHECK TABLE `#sql_1`; 161DROP TABLE `#sql_1`; 162DROP TABLESPACE `#sql_1`; 163DROP TABLE `t_utf8_1`; 164DROP TABLESPACE `s_Cöŀumň`; 165DROP TABLE `t_utf8_2` ; 166DROP TABLESPACE `s_cöĿǖmň` ; 167DROP TABLE `t_utf8_3`; 168DROP TABLESPACE `s_வணக்கம்`; 169 170--echo # 171--echo # Try to create a tablespace with the reserved case-sensitive prefix 'innodb_' 172--echo # 173--error ER_WRONG_TABLESPACE_NAME 174CREATE TABLESPACE `innodb_system` ADD DATAFILE 's_bad.ibd'; 175SHOW WARNINGS; 176--error ER_WRONG_TABLESPACE_NAME 177DROP TABLESPACE `innodb_system`; 178SHOW WARNINGS; 179# Possible, but not wise! 180CREATE TABLESPACE `InnoDB_System` ADD DATAFILE 's_InnoDB_System.ibd'; 181DROP TABLESPACE `InnoDB_System`; 182--error ER_WRONG_FILE_NAME 183CREATE TABLESPACE `InnoDB_System` ADD DATAFILE 'ibdata1'; 184SHOW WARNINGS; 185# Possible, but not wise! 186CREATE TABLESPACE `InnoDB_System` ADD DATAFILE 'ibdata1.ibd'; 187DROP TABLESPACE `InnoDB_System`; 188 189--error ER_WRONG_TABLESPACE_NAME 190CREATE TABLESPACE `innodb_temporary` ADD DATAFILE 's_bad.ibd'; 191SHOW WARNINGS; 192--error ER_WRONG_TABLESPACE_NAME 193DROP TABLESPACE `innodb_temporary`; 194SHOW WARNINGS; 195# Possible, but not wise! 196CREATE TABLESPACE `InnoDB_Temporary` ADD DATAFILE 's_InnoDB_Temporary.ibd'; 197DROP TABLESPACE `InnoDB_Temporary`; 198 199--error ER_WRONG_TABLESPACE_NAME 200CREATE TABLESPACE `innodb_custom` ADD DATAFILE 's_bad.ibd'; 201SHOW WARNINGS; 202--error ER_WRONG_TABLESPACE_NAME 203DROP TABLESPACE `innodb_custom`; 204SHOW WARNINGS; 205CREATE TABLESPACE `InnoDB_Custom` ADD DATAFILE 's_InnoDB_Custom.ibd'; 206DROP TABLESPACE `InnoDB_Custom`; 207CREATE TABLESPACE `INNODB_CUSTOM` ADD DATAFILE 's_INNODB_CUSTOM.ibd'; 208DROP TABLESPACE `INNODB_CUSTOM`; 209 210--error ER_DROP_FILEGROUP_FAILED 211DROP TABLESPACE `ib_logfile0`; 212SHOW WARNINGS; 213CREATE TABLESPACE `ib_logfile0` ADD DATAFILE 'ib_logfile0.ibd'; 214DROP TABLESPACE `ib_logfile0`; 215 216--error ER_DROP_FILEGROUP_FAILED 217DROP TABLESPACE `ib_logfile1`; 218SHOW WARNINGS; 219CREATE TABLESPACE `ib_logfile1` ADD DATAFILE 'ib_logfile1.ibd'; 220DROP TABLESPACE `ib_logfile1`; 221 222--error ER_DROP_FILEGROUP_FAILED 223DROP TABLESPACE `ibdata1`; 224SHOW WARNINGS; 225CREATE TABLESPACE `ibdata1` ADD DATAFILE 'ibdata1.ibd'; 226DROP TABLESPACE `ibdata1`; 227 228--error ER_DROP_FILEGROUP_FAILED 229DROP TABLESPACE `undo001`; 230SHOW WARNINGS; 231CREATE TABLESPACE `undo001` ADD DATAFILE 'undo001.ibd'; 232DROP TABLESPACE `undo001`; 233 234--error ER_DROP_FILEGROUP_FAILED 235DROP TABLESPACE `undo002`; 236SHOW WARNINGS; 237CREATE TABLESPACE `undo002` ADD DATAFILE 'undo002.ibd'; 238DROP TABLESPACE `undo002`; 239 240--echo # 241--echo # Test various forms of ADD DATAFILE 242--echo # 243 244--mkdir $MYSQL_TMP_DIR/tablespace.ibd 245--rmdir $MYSQL_TMP_DIR/tablespace.ibd 246--mkdir $MYSQL_TMP_DIR/tablespace.ibd 247--mkdir $MYSQL_TMP_DIR/s2_#_dir 248--mkdir $MYSQL_TMP_DIR/test 249 250CREATE TABLESPACE s_def ADD DATAFILE 's_def.ibd' ENGINE=InnoDB; 251CREATE TABLESPACE `s1_#_hash` ADD DATAFILE 's1_#_hash.ibd'; 252 253--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 254eval CREATE TABLESPACE s1_remote ADD DATAFILE '$MYSQL_TMP_DIR/s1.ibd.ibd'; 255--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 256eval CREATE TABLESPACE s2_remote ADD DATAFILE '$MYSQL_TMP_DIR/s2_#_dir/../s2_#_dir/s2.ibd'; 257 258--error ER_WRONG_FILE_NAME 259CREATE TABLESPACE s_bad ADD DATAFILE '.ibd'; 260SHOW WARNINGS; 261--error ER_WRONG_FILE_NAME 262CREATE TABLESPACE s_bad ADD DATAFILE 's_dir/s_subdir/.ibd'; 263SHOW WARNINGS; 264--error ER_WRONG_FILE_NAME 265CREATE TABLESPACE s_bad ADD DATAFILE 's_dir/s_bad.ibs'; 266SHOW WARNINGS; 267 268# A colon is always rejected on Linux, but it could be part of a valid absolute path on Windows. 269# These should be rejected even on Windows. 270--error ER_WRONG_FILE_NAME 271CREATE TABLESPACE s_bad ADD DATAFILE 'c:s_bad.ibd'; 272SHOW WARNINGS; 273--error ER_WRONG_FILE_NAME 274CREATE TABLESPACE s_bad ADD DATAFILE 'cc:/s_bad.ibd'; 275SHOW WARNINGS; 276--error ER_WRONG_FILE_NAME 277CREATE TABLESPACE s_bad ADD DATAFILE './drive:/s_bad.ibd'; 278SHOW WARNINGS; 279 280--echo # 281--echo # Try to create a tablespace where a same-named directory and file exist. 282--echo # 283--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 284eval CREATE TABLESPACE s4_def ADD DATAFILE '$MYSQL_TMP_DIR/tablespace.ibd/s4.ibd'; 285--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 286--error ER_CREATE_FILEGROUP_FAILED 287eval CREATE TABLESPACE s5_def ADD DATAFILE '$MYSQL_TMP_DIR/tablespace.ibd/s4.ibd'; 288SHOW WARNINGS; 289--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 290--error ER_CREATE_FILEGROUP_FAILED 291eval CREATE TABLESPACE s6_def ADD DATAFILE '$MYSQL_TMP_DIR/tablespace.ibd'; 292 293--source suite/innodb/include/show_i_s_tablespaces.inc 294 295--echo # Directory listing of MYSQLD_DATADIR/ 296--list_files $MYSQLD_DATADIR/ *.ibd 297 298--echo # Directory listing of MYSQL_TMP_DIR/ 299--list_files $MYSQL_TMP_DIR/ *.ibd 300 301--echo # Directory listing of MYSQL_TMP_DIR/tablespace.ibd/ 302--list_files $MYSQL_TMP_DIR/tablespace.ibd/ *.ibd 303 304--echo # Directory listing of MYSQL_TMP_DIR/s2_#_dir/ 305--list_files $MYSQL_TMP_DIR/s2_#_dir/ *.ibd 306 307DROP TABLESPACE s4_def; 308DROP TABLESPACE s1_remote; 309DROP TABLESPACE s2_remote; 310DROP TABLESPACE `s1_#_hash`; 311 312--echo # 313--echo # Try to create a tablespace that already exists. 314--echo # Make sure that the tablespace name is compared in a CASE SENSITIVE way. 315--echo # 316--error ER_TABLESPACE_EXISTS 317CREATE TABLESPACE s_def ADD DATAFILE 's_def.ibd'; 318SHOW WARNINGS; 319--error ER_TABLESPACE_EXISTS 320CREATE TABLESPACE s_def ADD DATAFILE 's_def_2.ibd'; 321SHOW WARNINGS; 322--error ER_CREATE_FILEGROUP_FAILED 323CREATE TABLESPACE S_new ADD DATAFILE 's_def.ibd'; 324SHOW WARNINGS; 325CREATE TABLESPACE `s_DEF` ADD DATAFILE 's_def_2.ibd'; 326DROP TABLESPACE `s_DEF`; 327 328--echo # 329--echo # Make a file-per-table tablespace name and try to use it as a General tablespace 330--echo # 331CREATE TABLE t_single (a int, b text); 332--source suite/innodb/include/show_i_s_tables.inc 333--source suite/innodb/include/show_i_s_tablespaces.inc 334# A parse error occurs if an identifier contains a '/' unless the identifier is quoted. 335--error ER_PARSE_ERROR 336CREATE TABLE t_general (a int, b text) TABLESPACE test/t_single engine=InnoDB; 337--error ER_WRONG_TABLESPACE_NAME 338CREATE TABLE t_general (a int, b text) TABLESPACE `test/t_single` engine=InnoDB; 339SHOW WARNINGS; 340--error ER_TABLESPACE_MISSING 341CREATE TABLE t_general (a int, b text) TABLESPACE `S_Def` engine=InnoDB; 342SHOW WARNINGS; 343--error ER_TABLESPACE_MISSING 344CREATE TABLE t_general (a int, b text) TABLESPACE `S_DEF` engine=InnoDB; 345SHOW WARNINGS; 346 347--error ER_WRONG_TABLESPACE_NAME 348CREATE TABLESPACE `test/t_single` ADD DATAFILE 's_single.ibd'; 349SHOW WARNINGS; 350--error ER_WRONG_TABLESPACE_NAME 351CREATE TABLESPACE `Test/t_Single` ADD DATAFILE 's_single.ibd'; 352SHOW WARNINGS; 353--error ER_WRONG_TABLESPACE_NAME 354CREATE TABLESPACE `TEST/T_SINGLE` ADD DATAFILE 's_single.ibd'; 355SHOW WARNINGS; 356 357DROP TABLE t_single; 358 359--source suite/innodb/include/show_i_s_tablespaces.inc 360 361--echo # 362--echo # Row format is not allowed on CREATE TABLESPACE 363--echo # 364--error ER_PARSE_ERROR 365CREATE TABLESPACE s_red ADD DATAFILE 's_red.ibd' ROW_FORMAT=redundant; 366 367--echo # 368--echo # Add tables to the tablespaces. 369--echo # 370CREATE TABLE t_def_in_def (a int, b text) TABLESPACE s_def; 371CREATE TABLE t_red_in_def (a int, b text) ROW_FORMAT=Redundant TABLESPACE s_def; 372# Since these are creating tables within existing general tablespaces the value 373# of INNODB_FILE_FORMAT and INNODB_FILE_PER_TABLE do not matter. 374SET GLOBAL innodb_file_per_table = OFF; 375CREATE TABLE t_dyn_in_def (a int, b text) ROW_FORMAT=Dynamic TABLESPACE s_def; 376 377--echo # Add data to the existing Tables 378INSERT INTO t_def_in_def VALUES (1,'a'),(2,'b'),(3,'c'); 379INSERT INTO t_red_in_def VALUES (1,'a'),(2,'b'),(3,'c'); 380INSERT INTO t_dyn_in_def VALUES (1,'a'),(2,'b'),(3,'c'); 381 382--echo # 383--echo # Try to drop a tablespace which is not empty 384--echo # 385--error ER_DROP_FILEGROUP_FAILED 386DROP TABLESPACE s_def; 387SHOW WARNINGS; 388 389--source suite/innodb/include/show_i_s_tablespaces.inc 390--source suite/innodb/include/show_i_s_tables.inc 391--echo # Directory of MYSQLD_DATADIR/ 392--list_files $MYSQLD_DATADIR/ *.ibd 393--echo # Directory of MYSQLD_DATADIR/test/ 394--list_files $MYSQLD_DATADIR/test/ *.ibd 395 396--echo # 397--echo # Drop the tables we no longer need. 398--echo # 399 400CHECK TABLE t_dyn_in_def; 401CHECK TABLE t_red_in_def; 402 403DROP TABLE t_dyn_in_def; 404DROP TABLE t_red_in_def; 405 406--echo # 407--echo # Try to make a table using the database name with an existing table name 408--echo # 409--error ER_PARSE_ERROR 410CREATE TABLE test/t_def_in_def (a int, b text) TABLESPACE s_def; 411# With the back-quotes, MySQL converts the tablename to `test@002ft_def_in_def`. 412CREATE TABLE `test/t_def_in_def` (a int, b text) TABLESPACE s_def; 413 414--source suite/innodb/include/show_i_s_tables.inc 415--source suite/innodb/include/show_i_s_tablespaces.inc 416--echo # Directory listing of MYSQLD_DATADIR/ 417--list_files $MYSQLD_DATADIR/ *.ibd 418--echo # Directory listing of MYSQLD_DATADIR/test/ 419--list_files $MYSQLD_DATADIR/test/ *.ibd 420 421--echo # 422--echo # Try to create a temporary tablespace 423--echo # 424--error ER_PARSE_ERROR 425CREATE TEMPORARY TABLESPACE s_temp ADD DATAFILE 's_temp.ibd'; 426SHOW WARNINGS; 427 428--echo # 429--echo # Try to put a temporary table into a non-temporary tablespace 430--echo # 431--error ER_ILLEGAL_HA_CREATE_OPTION 432CREATE TEMPORARY TABLE t_temp_red (a int, b text) ROW_FORMAT=redundant TABLESPACE s_def; 433SHOW WARNINGS; 434 435--echo # 436--echo # Try to put a compressed temporary table into the system temporary tablespace 437--echo # 438--error ER_ILLEGAL_HA_CREATE_OPTION 439CREATE TEMPORARY TABLE t_temp_zip (a int, b text) ROW_FORMAT=compressed TABLESPACE=`innodb_temporary`; 440SHOW WARNINGS; 441 442--echo # 443--echo # Try to add a second table to a single-table tablespace 444--echo # 445SET GLOBAL innodb_file_format = 'barracuda'; 446SET GLOBAL innodb_file_per_table = ON; 447CREATE TABLE s_single (a int, b text) ROW_FORMAT=dynamic; 448--error ER_TABLESPACE_MISSING 449CREATE TABLE t_second (a int, b text) TABLESPACE s_single; 450SHOW WARNINGS; 451--error ER_WRONG_TABLESPACE_NAME 452CREATE TABLE t_second (a int, b text) TABLESPACE=`test/s_single`; 453SHOW WARNINGS; 454--source suite/innodb/include/show_i_s_tablespaces.inc 455DROP TABLE s_single; 456 457--echo # 458--echo # Try to use both TABLESPACE and DATA DIRECTORY in the same CREATE TABLE. 459--echo # 460--echo # Strict mode, file_format and file_per_table should make no difference 461--echo # when using general tablespaces. If TABLESPACE=innodb_file-per-table, 462--echo # innodb_strict_mode apply. 463--echo # 464SET GLOBAL innodb_file_per_table = OFF; 465SET innodb_strict_mode = OFF; 466 467--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 468--error ER_ILLEGAL_HA_CREATE_OPTION 469eval CREATE TABLE t3 (a int, b text) DATA DIRECTORY='$MYSQL_TMP_DIR' TABLESPACE s_def; 470SHOW WARNINGS; 471 472--echo # Cannot use both a general tablespace and a DATA DIRECTORY 473--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 474--error ER_ILLEGAL_HA_CREATE_OPTION 475eval CREATE TABLE t4 (a int, b text) TABLESPACE=s_def DATA DIRECTORY='$MYSQL_TMP_DIR'; 476SHOW WARNINGS; 477 478--echo # TABLESPACE=innodb_file_per_table can be used with DATA DIRECTORY 479--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 480eval CREATE TABLE t4 (a int, b text) TABLESPACE=innodb_file_per_table DATA DIRECTORY='$MYSQL_TMP_DIR'; 481--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 482SHOW CREATE TABLE t4; 483 484--echo # An altered table should retain both TABLESPACE=innodb_file_per_table and the DATA DIRECTORY 485ALTER TABLE t4 ROW_FORMAT=dynamic, algorithm=copy; 486--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 487SHOW CREATE TABLE t4; 488DROP TABLE t4; 489 490--echo # An empty string in DATA DIRECTORY='' indicates the current directory, 491--echo # which is not allowed. 492--error ER_WRONG_TABLE_NAME 493CREATE TABLE t4 (a int, b text) TABLESPACE=innodb_file_per_table DATA DIRECTORY=''; 494SHOW WARNINGS; 495 496SET GLOBAL innodb_file_per_table = ON; 497SET innodb_strict_mode = ON; 498 499--error ER_WRONG_TABLE_NAME 500CREATE TABLE t4 (a int, b text) TABLESPACE=innodb_file_per_table DATA DIRECTORY=''; 501SHOW WARNINGS; 502--error ER_WRONG_TABLE_NAME 503CREATE TABLE t4 (a int, b text) TABLESPACE=innodb_file_per_table DATA DIRECTORY='.'; 504SHOW WARNINGS; 505--error ER_WRONG_TABLE_NAME 506CREATE TABLE t4 (a int, b text) TABLESPACE=innodb_file_per_table DATA DIRECTORY='test'; 507SHOW WARNINGS; 508 509--source suite/innodb/include/show_i_s_tablespaces.inc 510--source suite/innodb/include/show_i_s_tables.inc 511DROP TABLE t_def_in_def; 512DROP TABLE `test/t_def_in_def`; 513 514--echo # 515--echo # Create tables explicitly in the system tablespace. 516--echo # 517CREATE TABLE t_red_in_system (a int, b text) TABLESPACE=`innodb_system` ROW_FORMAT=redundant; 518CREATE TABLE t_com_in_system (a int, b text) TABLESPACE=`innodb_system` ROW_FORMAT=compact; 519CREATE TABLE t_dyn_in_system (a int, b text) TABLESPACE=`innodb_system` ROW_FORMAT=dynamic; 520--error ER_ILLEGAL_HA_CREATE_OPTION 521CREATE TABLE t_zip_in_system (a int, b text) TABLESPACE=`innodb_system` ROW_FORMAT=compressed; 522SHOW WARNINGS; 523 524--source suite/innodb/include/show_i_s_tablespaces.inc 525--source suite/innodb/include/show_i_s_tables.inc 526CHECK TABLE t_red_in_system; 527CHECK TABLE t_com_in_system; 528CHECK TABLE t_dyn_in_system; 529DROP TABLE t_red_in_system; 530DROP TABLE t_com_in_system; 531DROP TABLE t_dyn_in_system; 532 533--echo # 534--echo # Create tables explicitly as file_per_table tablespaces. 535--echo # 536CREATE TABLE t_red_as_file_per_table (a int, b text) TABLESPACE=innodb_file_per_table ROW_FORMAT=redundant; 537CREATE TABLE t_com_as_file_per_table (a int, b text) TABLESPACE=innodb_file_per_table ROW_FORMAT=compact; 538CREATE TABLE t_dyn_as_file_per_table (a int, b text) TABLESPACE=innodb_file_per_table ROW_FORMAT=dynamic; 539--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 540eval CREATE TABLE t_def_as_remote (a int, b text) TABLESPACE=innodb_file_per_table DATA DIRECTORY='$MYSQL_TMP_DIR'; 541--source suite/innodb/include/show_i_s_tablespaces.inc 542--source suite/innodb/include/show_i_s_tables.inc 543--echo # Directory listing of MYSQLD_DATADIR/ 544--list_files $MYSQLD_DATADIR/ *.ibd 545--echo # Directory listing of MYSQLD_DATADIR/test/ 546--list_files $MYSQLD_DATADIR/test/ *.ibd 547SHOW CREATE TABLE t_red_as_file_per_table; 548SHOW CREATE TABLE t_com_as_file_per_table; 549SHOW CREATE TABLE t_dyn_as_file_per_table; 550--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 551SHOW CREATE TABLE t_def_as_remote; 552 553--echo # 554--echo # These explicit file_per_table tables can be moved to a general tablespace. 555--echo # 556CREATE TABLESPACE s_multiple ADD DATAFILE 'multiple.ibd'; 557ALTER TABLE `t_red_as_file_per_table` TABLESPACE=`s_multiple`, RENAME TO `t_red_was_file_per_table`; 558ALTER TABLE `t_com_as_file_per_table` TABLESPACE=`s_multiple`, RENAME TO `t_com_was_file_per_table`; 559ALTER TABLE `t_dyn_as_file_per_table` TABLESPACE=`s_multiple`, RENAME TO `t_dyn_was_file_per_table`; 560ALTER TABLE `t_def_as_remote` TABLESPACE=`s_multiple`, RENAME TO `t_def_was_remote`; 561 562--source suite/innodb/include/show_i_s_tablespaces.inc 563--source suite/innodb/include/show_i_s_tables.inc 564--echo # Directory listing of MYSQLD_DATADIR/ 565--list_files $MYSQLD_DATADIR/ *.ibd 566--echo # Directory listing of MYSQLD_DATADIR/test/ 567--list_files $MYSQLD_DATADIR/test/ *.ibd 568 569--echo # 570--echo # Tables in a general tablespace can be moved to file_per_table locations. 571--echo # 572ALTER TABLE `t_red_was_file_per_table` TABLESPACE=`innodb_file_per_table`, RENAME TO `t_red_to_file_per_table`; 573ALTER TABLE `t_com_was_file_per_table` TABLESPACE=`innodb_file_per_table`, RENAME TO `t_com_to_file_per_table`; 574ALTER TABLE `t_dyn_was_file_per_table` TABLESPACE=`innodb_file_per_table`, RENAME TO `t_dyn_to_file_per_table`; 575--echo # Note that MySQL ignores DATA DIRECTORY on all ALTER TABLE statements. 576--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 577eval ALTER TABLE `t_def_was_remote` TABLESPACE=`innodb_file_per_table`, DATA DIRECTORY='$MYSQL_TMP_DIR', RENAME TO `t_def_to_file_per_table`; 578 579--source suite/innodb/include/show_i_s_tablespaces.inc 580--source suite/innodb/include/show_i_s_tables.inc 581--echo # Directory listing of MYSQLD_DATADIR/ 582--list_files $MYSQLD_DATADIR/ *.ibd 583--echo # Directory listing of MYSQLD_DATADIR/test/ 584--list_files $MYSQLD_DATADIR/test/ *.ibd 585 586DROP TABLE t_red_to_file_per_table; 587DROP TABLE t_com_to_file_per_table; 588DROP TABLE t_dyn_to_file_per_table; 589DROP TABLE t_def_to_file_per_table; 590DROP TABLESPACE s_multiple; 591 592--echo # 593--echo # Try the syntax that InnoDB does not support. 594--echo # 595--error ER_PARSE_ERROR 596CREATE TABLESPACE s_bad USE LOGFILE GROUP logfile_group; 597--error ER_PARSE_ERROR 598CREATE TABLESPACE s_bad EXTENT_SIZE = 1G; 599--error ER_PARSE_ERROR 600CREATE TABLESPACE s_bad INITIAL_SIZE = 100M; 601--error ER_PARSE_ERROR 602CREATE LOGFILE GROUP s_bad; 603--error ER_ILLEGAL_HA_CREATE_OPTION 604CREATE LOGFILE GROUP s_bad ADD UNDOFILE 'undo_1.dat'; 605 606--error ER_CHECK_NOT_IMPLEMENTED 607DROP LOGFILE GROUP s_bad; 608 609--error ER_PARSE_ERROR 610ALTER LOGFILE GROUP s_bad; 611--error ER_PARSE_ERROR 612ALTER TABLESPACE s_bad; 613--error ER_CHECK_NOT_IMPLEMENTED 614ALTER TABLESPACE s_bad ADD DATAFILE 'bad2.ibd'; 615--error ER_CHECK_NOT_IMPLEMENTED 616ALTER TABLESPACE s_bad DROP DATAFILE 'bad2.ibd'; 617--error ER_CHECK_NOT_IMPLEMENTED 618ALTER TABLESPACE s_bad READ_ONLY; 619--error ER_CHECK_NOT_IMPLEMENTED 620ALTER TABLESPACE s_bad READ_WRITE; 621--error ER_CHECK_NOT_IMPLEMENTED 622ALTER TABLESPACE s_bad NOT ACCESSIBLE; 623--error ER_PARSE_ERROR 624ALTER TABLESPACE s_def INITIAL_SIZE = 1G; 625--error ER_PARSE_ERROR 626ALTER TABLESPACE s_def MAX_SIZE = 1G; 627--error ER_PARSE_ERROR 628ALTER TABLESPACE s_def AUTOEXTEND_SIZE = 10M; 629--error ER_PARSE_ERROR 630ALTER TABLESPACE s_def NODEGROUP = 5; 631--error ER_PARSE_ERROR 632ALTER TABLESPACE s_def WAIT; 633--error ER_PARSE_ERROR 634ALTER TABLESPACE s_def COMMENT = 'This comment is ignored'; 635 636--echo # 637--echo # Try the syntax that MySQL docs say is ignored. 638--echo # 639CREATE TABLESPACE s_ignore1 ADD DATAFILE 's_ignore1.ibd' AUTOEXTEND_SIZE = 10M; 640CREATE TABLESPACE s_ignore2 ADD DATAFILE 's_ignore2.ibd' MAX_SIZE = 1G; 641CREATE TABLESPACE s_ignore3 ADD DATAFILE 's_ignore3.ibd' NODEGROUP = 5; 642CREATE TABLESPACE s_ignore4 ADD DATAFILE 's_ignore4.ibd' WAIT; 643CREATE TABLESPACE s_ignore5 ADD DATAFILE 's_ignore5.ibd' COMMENT = 'This comment is ignored'; 644 645--source suite/innodb/include/show_i_s_tablespaces.inc 646 647DROP TABLESPACE s_ignore1; 648DROP TABLESPACE s_ignore2; 649DROP TABLESPACE s_ignore3; 650DROP TABLESPACE s_ignore4; 651DROP TABLESPACE s_ignore5; 652 653--echo # 654--echo # Try various ALTER TABLE statements. 655--echo # 656CREATE TABLE t_in_def (a serial key, b text) TABLESPACE s_def; 657INSERT INTO t_in_def(b) VALUES(repeat("a short string - ",5)); 658INSERT INTO t_in_def(b) VALUES(repeat("a long string - ",50)); 659INSERT INTO t_in_def(b) SELECT b FROM t_in_def; 660SELECT a, left(b,50) FROM t_in_def; 661SHOW CREATE TABLE t_in_def; 662--source suite/innodb/include/show_i_s_tables.inc 663 664ALTER TABLE t_in_def ROW_FORMAT=redundant; 665SHOW CREATE TABLE t_in_def; 666 667ALTER TABLE t_in_def ROW_FORMAT=dynamic; 668SHOW CREATE TABLE t_in_def; 669 670ALTER TABLE t_in_def ADD COLUMN (c int); 671SHOW CREATE TABLE t_in_def; 672 673ALTER TABLE t_in_def ADD INDEX c (c); 674SHOW CREATE TABLE t_in_def; 675 676ALTER TABLE t_in_def DROP INDEX c; 677SHOW CREATE TABLE t_in_def; 678 679ALTER TABLE t_in_def DROP COLUMN c; 680SHOW CREATE TABLE t_in_def; 681 682ALTER TABLE t_in_def AUTO_INCREMENT=100; 683SHOW CREATE TABLE t_in_def; 684INSERT INTO t_in_def(b) VALUES("after ALTER TABLE AUTO_INCREMENT"); 685SELECT a, left(b,50) FROM t_in_def; 686SHOW CREATE TABLE t_in_def; 687 688ALTER TABLE t_in_def CHANGE a aa int; 689SHOW CREATE TABLE t_in_def; 690 691ALTER TABLE t_in_def CHANGE b bb varchar(1000); 692SHOW CREATE TABLE t_in_def; 693 694ALTER TABLE t_in_def DROP PRIMARY KEY; 695SHOW CREATE TABLE t_in_def; 696 697ALTER TABLE t_in_def ADD PRIMARY KEY aa(aa), ALGORITHM=INPLACE; 698SHOW CREATE TABLE t_in_def; 699 700ALTER TABLE t_in_def ADD INDEX ab(aa,bb(25)), ALGORITHM=COPY; 701SHOW CREATE TABLE t_in_def; 702 703ALTER TABLE t_in_def ADD INDEX bb(bb(50)); 704SHOW CREATE TABLE t_in_def; 705 706RENAME TABLE t_in_def TO t; 707SHOW CREATE TABLE t; 708--source suite/innodb/include/show_i_s_tables.inc 709INSERT INTO t VALUES(200, "after RENAME TABLE t_in_def TO t"); 710SELECT aa, left(bb,50) FROM t; 711 712--echo # 713--echo # Move tables between tablespaces. 714--echo # 715CREATE TABLESPACE s_alt1 ADD DATAFILE 's_alt1.ibd'; 716CREATE TABLESPACE s_alt2 ADD DATAFILE 's_alt2.ibd'; 717--source suite/innodb/include/show_i_s_tablespaces.inc 718ALTER TABLE t RENAME TO t_nomad, TABLESPACE s_alt1; 719SHOW CREATE TABLE t_nomad; 720--source suite/innodb/include/show_i_s_tables.inc 721ALTER TABLE t_nomad TABLESPACE s_alt2; 722SHOW CREATE TABLE t_nomad; 723--source suite/innodb/include/show_i_s_tables.inc 724ALTER TABLE t_nomad TABLESPACE s_def, DROP COLUMN bb; 725SHOW CREATE TABLE t_nomad; 726--source suite/innodb/include/show_i_s_tables.inc 727--source suite/innodb/include/show_i_s_tablespaces.inc 728DROP TABLE t_nomad; 729DROP TABLESPACE s_alt1; 730DROP TABLESPACE s_alt2; 731 732--echo # 733--echo # Move a table from the System Tablespace into a General Tablespace 734--echo # and then back out to the system tablespace again. 735--echo # 736SET GLOBAL innodb_file_per_table=OFF; 737CREATE TABLE t_system (a serial key, b text); 738INSERT INTO t_system(b) VALUES(repeat("a short string - ",5)); 739INSERT INTO t_system(b) VALUES(repeat("a long string - ",50)); 740SHOW CREATE TABLE t_system; 741--source suite/innodb/include/show_i_s_tables.inc 742 743ALTER TABLE t_system TABLESPACE s_def; 744SHOW CREATE TABLE t_system; 745--source suite/innodb/include/show_i_s_tables.inc 746 747ALTER TABLE t_system TABLESPACE=`innodb_system`; 748SHOW CREATE TABLE t_system; 749--source suite/innodb/include/show_i_s_tables.inc 750 751--echo # 752--echo # Do a few ALTER TABLES for this table that was moved out and back into the system tablespace. 753--echo # 754ALTER TABLE t_system ROW_FORMAT=redundant; 755SHOW CREATE TABLE t_system; 756ALTER TABLE t_system ROW_FORMAT=dynamic; 757SHOW CREATE TABLE t_system; 758ALTER TABLE t_system ADD COLUMN (c int); 759SHOW CREATE TABLE t_system; 760ALTER TABLE t_system ADD INDEX c (c); 761SHOW CREATE TABLE t_system; 762ALTER TABLE t_system DROP INDEX c; 763SHOW CREATE TABLE t_system; 764ALTER TABLE t_system DROP COLUMN c; 765SHOW CREATE TABLE t_system; 766 767--echo # 768--echo # Now try to put that table into its own Single-Table tablespace. 769--echo # It is not allowed since the table is now marked with the system tablespace 770--echo # 771SET GLOBAL innodb_file_per_table=ON; 772ALTER TABLE t_system RENAME TO t_still_system; 773SHOW CREATE TABLE t_still_system; 774--source suite/innodb/include/show_i_s_tables.inc 775DROP TABLE t_still_system; 776 777--echo # 778--echo # Try to create or move a table into the temporary tablespace. 779--echo # 780--error ER_ILLEGAL_HA_CREATE_OPTION 781CREATE TABLE t_not_temp (a int, b text) TABLESPACE=`innodb_temporary`; 782SHOW WARNINGS; 783 784CREATE TABLE t_not_temp (a int, b text) TABLESPACE s_def; 785--error ER_ILLEGAL_HA_CREATE_OPTION 786ALTER TABLE t_not_temp TABLESPACE=`innodb_temporary`; 787SHOW WARNINGS; 788DROP TABLE t_not_temp; 789 790--echo # 791--echo # Try to create or move a temporary table in innodb_file_per_table 792--echo # or innodb_temporary tablespaces with STRICT_MODE ON and OFF 793--echo # 794CREATE TEMPORARY TABLE t_my_temp (a int, b text) TABLESPACE=`innodb_temporary`; 795SHOW CREATE TABLE t_my_temp; 796DROP TABLE t_my_temp; 797 798SET innodb_strict_mode = OFF; 799 800CREATE TEMPORARY TABLE t_my_temp (a int, b text); 801SHOW CREATE TABLE t_my_temp; 802 803ALTER TABLE t_my_temp TABLESPACE innodb_temporary; 804SHOW WARNINGS; 805SHOW CREATE TABLE t_my_temp; 806 807ALTER TABLE t_my_temp TABLESPACE innodb_file_per_table; 808SHOW WARNINGS; 809SHOW CREATE TABLE t_my_temp; 810 811DROP TABLE t_my_temp; 812 813SET innodb_strict_mode = ON; 814CREATE TEMPORARY TABLE t_my_temp (a int, b text); 815SHOW CREATE TABLE t_my_temp; 816 817--error ER_ILLEGAL_HA_CREATE_OPTION 818ALTER TABLE t_my_temp TABLESPACE=innodb_file_per_table; 819 820ALTER TABLE t_my_temp TABLESPACE=innodb_temporary; 821SHOW WARNINGS; 822SHOW CREATE TABLE t_my_temp; 823 824DROP TABLE t_my_temp; 825 826--echo # 827--echo # Try to create or move a table into the redo tablespace 828--echo # or any tablespace using the reserved `innodb_` prefix. 829--echo # 830--error ER_WRONG_TABLESPACE_NAME 831CREATE TABLE t_data (a int, b text) TABLESPACE=`innodb_redo_log`; 832SHOW WARNINGS; 833--error ER_WRONG_TABLESPACE_NAME 834CREATE TABLE t_data (a int, b text) TABLESPACE=`innodb_anything`; 835SHOW WARNINGS; 836 837CREATE TABLE t_data (a int, b text) TABLESPACE s_def; 838--error ER_WRONG_TABLESPACE_NAME 839ALTER TABLE t_data TABLESPACE=`innodb_redo_log`; 840SHOW WARNINGS; 841--error ER_WRONG_TABLESPACE_NAME 842ALTER TABLE t_data TABLESPACE=`innodb_anything`; 843SHOW WARNINGS; 844DROP TABLE t_data; 845 846--echo # 847--echo # Move a table from a Single-Table tablespace into a General Tablespace. 848--echo # 849CREATE TABLE t_single (a serial key, b text); 850INSERT INTO t_single(b) VALUES(repeat("a short string - ",5)); 851INSERT INTO t_single(b) VALUES(repeat("a long string - ",50)); 852SHOW CREATE TABLE t_single; 853--source suite/innodb/include/show_i_s_tables.inc 854ALTER TABLE t_single TABLESPACE s_def; 855SHOW CREATE TABLE t_single; 856--source suite/innodb/include/show_i_s_tables.inc 857DROP TABLE t_single; 858 859--echo # 860--echo # Move a MyISAM table into an InnoDB General Tablespace and back. 861--echo # 862CREATE TABLE t_myisam (a serial key, b int) ENGINE=MyISAM; 863INSERT INTO t_myisam(b) VALUES(11); 864SHOW CREATE TABLE t_myisam; 865ALTER TABLE t_myisam RENAME TO t_innodb, TABLESPACE s_def, ENGINE=InnoDB; 866INSERT INTO t_innodb(b) VALUES(22); 867SHOW CREATE TABLE t_innodb; 868--source suite/innodb/include/show_i_s_tables.inc 869ALTER TABLE t_innodb RENAME TO t_myisam, ENGINE=MyISAM; 870INSERT INTO t_myisam(b) VALUES(33); 871SELECT * FROM t_myisam; 872SHOW CREATE TABLE t_myisam; 873ALTER TABLE t_myisam RENAME TO t_innodb, ENGINE=InnoDB; 874INSERT INTO t_innodb(b) VALUES(44); 875SHOW CREATE TABLE t_innodb; 876--source suite/innodb/include/show_i_s_tables.inc 877DROP TABLE t_innodb; 878 879--echo # 880--echo # Move a Dynamic table from an InnoDB General tablespace to MyISAM 881--echo # and Memory and back without having to re-specify the tablespace 882--echo # and row_format. 883--echo # 884CREATE TABLE t_dyn_in_s_def (a serial key, b int) ROW_FORMAT=Dynamic TABLESPACE=s_def ENGINE=InnoDB; 885INSERT INTO t_dyn_in_s_def(b) VALUES(11); 886SHOW CREATE TABLE t_dyn_in_s_def; 887--source suite/innodb/include/show_i_s_tables.inc 888ALTER TABLE t_dyn_in_s_def ENGINE=MyISAM; 889INSERT INTO t_dyn_in_s_def(b) VALUES(22); 890SHOW CREATE TABLE t_dyn_in_s_def; 891--source suite/innodb/include/show_i_s_tables.inc 892ALTER TABLE t_dyn_in_s_def ENGINE=InnoDB; 893INSERT INTO t_dyn_in_s_def(b) VALUES(33); 894SHOW CREATE TABLE t_dyn_in_s_def; 895--source suite/innodb/include/show_i_s_tables.inc 896ALTER TABLE t_dyn_in_s_def ENGINE=Memory; 897INSERT INTO t_dyn_in_s_def(b) VALUES(44); 898SHOW CREATE TABLE t_dyn_in_s_def; 899--source suite/innodb/include/show_i_s_tables.inc 900ALTER TABLE t_dyn_in_s_def ENGINE=InnoDB; 901INSERT INTO t_dyn_in_s_def(b) VALUES(55); 902SELECT * FROM t_dyn_in_s_def; 903SHOW CREATE TABLE t_dyn_in_s_def; 904--source suite/innodb/include/show_i_s_tables.inc 905CHECK TABLE t_dyn_in_s_def; 906DROP TABLE t_dyn_in_s_def; 907 908--echo # 909--echo # If a tablespace name is associated with a table in another SE, and that tablespace 910--echo # does not exist in InnoDB, the ALTER TABLE will fail 911--echo # 912CREATE TABLESPACE s_short_life ADD DATAFILE 'short_life.ibd'; 913CREATE TABLE t_nomad (a serial key, b int) TABLESPACE=s_short_life ENGINE=InnoDB; 914INSERT INTO t_nomad(b) VALUES(11); 915SHOW CREATE TABLE t_nomad; 916--source suite/innodb/include/show_i_s_tables.inc 917ALTER TABLE t_nomad ENGINE=MyISAM; 918INSERT INTO t_nomad(b) VALUES(22); 919SHOW CREATE TABLE t_nomad; 920--source suite/innodb/include/show_i_s_tables.inc 921DROP TABLESPACE s_short_life; 922--error ER_TABLESPACE_MISSING 923ALTER TABLE t_nomad ENGINE=InnoDB; 924CREATE TABLESPACE s_shorter_life ADD DATAFILE 'shorter_life.ibd'; 925ALTER TABLE t_nomad ENGINE=InnoDB TABLESPACE=s_shorter_life; 926SHOW CREATE TABLE t_nomad; 927--source suite/innodb/include/show_i_s_tables.inc 928DROP TABLE t_nomad; 929DROP TABLESPACE s_shorter_life; 930 931--echo # 932--echo # Show that a table with the same SQL name can be created in two different 933--echo # databases, whether they are in the system tablespace, a general tablespace 934--echo # or their own file-per-table tablespace. 935--echo # Also show that DROP DATABASE will remove tables from inside a General Tablespace 936--echo # without removing the tablespace or other tables in it for another databases. 937--echo # 938SET GLOBAL innodb_file_per_table=OFF; 939CREATE TABLE t_system (a serial key, b text); 940CREATE TABLE t_general (a serial key, b text) TABLESPACE s_def; 941CREATE TABLE t_single (a serial key, b text) TABLESPACE=`innodb_file_per_table`; 942SHOW TABLES; 943 944CREATE DATABASE test1; 945USE test1; 946# A general tablespace is independent of the current database. 947CREATE TABLESPACE s_empty1 ADD DATAFILE 's_empty1.ibd' ENGINE InnoDB; 948CREATE TABLE t_system (a serial key, b text); 949CREATE TABLE t_general (a serial key, b text) TABLESPACE s_def; 950CREATE TABLE t_single (a serial key, b text) TABLESPACE=`innodb_file_per_table`; 951SHOW TABLES; 952 953USE test; 954--source suite/innodb/include/show_i_s_tables.inc 955--source suite/innodb/include/show_i_s_tablespaces.inc 956DROP DATABASE test1; 957--source suite/innodb/include/show_i_s_tables.inc 958--source suite/innodb/include/show_i_s_tablespaces.inc 959DROP TABLE t_system; 960DROP TABLE t_general; 961DROP TABLE t_single; 962DROP TABLESPACE s_empty1; 963 964--echo # 965--echo # Assign different tablespace for PK-FK tables 966--echo # 967CREATE TABLESPACE s1 ADD DATAFILE 's1.ibd' ENGINE InnoDB; 968CREATE TABLE t1 (a int primary key) ENGINE=innodb TABLESPACE=s1; 969CREATE TABLE t2 (b int , foreign key (b) references t1(a)) ENGINE=innodb ; 970INSERT INTO t1 VALUES (100); 971INSERT INTO t1 VALUES (200); 972INSERT INTO t2 VALUES (100); 973--source suite/innodb/include/show_i_s_tables.inc 974SELECT * FROM t1; 975SELECT * FROM t2; 976SELECT * FROM t1,t2 WHERE t1.a=t2.b; 977DROP TABLE t2,t1; 978DROP TABLESPACE s1; 979 980--echo # 981--echo # Assigning general tablespace from procedure 982--echo # 983USE test; 984CREATE TABLESPACE s1 ADD DATAFILE 's1.ibd' ENGINE InnoDB; 985CREATE TABLE t1 (a geometry NOT NULL, SPATIAL (a)) ENGINE=InnoDB; 986INSERT INTO t1 VALUES (st_GeomFromText("LINESTRING(100 100, 200 200, 300 300)")) ; 987DELIMITER |; 988CREATE PROCEDURE p1() 989BEGIN 990 ALTER TABLE t1 TABLESPACE=s1; 991END| 992DELIMITER ;| 993--source suite/innodb/include/show_i_s_tables.inc 994CALL p1(); 995--source suite/innodb/include/show_i_s_tables.inc 996DROP PROCEDURE p1; 997 998--echo # 999--echo # Show that DISCARD/IMPORT tablespace does not work on a general tablespace. 1000--echo # 1001--error ER_NOT_ALLOWED_COMMAND 1002ALTER TABLE t1 DISCARD TABLESPACE; 1003SHOW WARNINGS; 1004--error ER_NOT_ALLOWED_COMMAND 1005ALTER TABLE t1 IMPORT TABLESPACE; 1006SHOW WARNINGS; 1007DROP TABLE t1; 1008DROP TABLESPACE s1; 1009 1010--echo # 1011--echo # Clean-up. 1012--echo # 1013 1014DROP TABLESPACE s_def; 1015 1016SET GLOBAL innodb_file_per_table=default; 1017SET GLOBAL innodb_strict_mode=default; 1018 1019--rmdir $MYSQL_TMP_DIR/s2_#_dir 1020--rmdir $MYSQL_TMP_DIR/test 1021--rmdir $MYSQL_TMP_DIR/tablespace.ibd 1022 1023--error 1 1024--remove_file $MYSQLD_DATADIR/s1.ibd.isl 1025--error 1 1026--remove_file $MYSQLD_DATADIR/s2.isl 1027--error 1 1028--remove_file $MYSQLD_DATADIR/s4.isl 1029 1030--disable_query_log 1031call mtr.add_suppression("\\[ERROR\\] InnoDB: File .*\.ibd: 'create' returned OS error .*"); 1032call mtr.add_suppression("\\[ERROR\\] InnoDB: The error means the system cannot find the path specified"); 1033call mtr.add_suppression("\\[ERROR\\] InnoDB: The error means mysqld does not have the access rights to the directory. It may also be you have created a subdirectory of the same name as a data file."); 1034call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number .* in a file operation"); 1035call mtr.add_suppression("\\[ERROR\\] InnoDB: Error number .* means"); 1036call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot create file"); 1037call mtr.add_suppression("\\[ERROR\\] InnoDB: Invalid use of ':' in"); 1038call mtr.add_suppression("\\[ERROR\\] InnoDB: The file .* already exists though the corresponding table did not exist in the InnoDB data dictionary"); 1039--enable_query_log 1040 1041