mirror of
https://github.com/MariaDB/server.git
synced 2025-09-09 18:40:27 +03:00
Many InnoDB data dictionary cache operations require that the table name be copied so that it will be NUL terminated. (For example, SYS_TABLES.NAME is not guaranteed to be NUL-terminated.) dict_table_t::is_garbage_name(): Check if a name belongs to the background drop table queue. dict_check_if_system_table_exists(): Remove. dict_sys_t::load_sys_tables(): Load the non-hard-coded system tables SYS_FOREIGN, SYS_FOREIGN_COLS, SYS_VIRTUAL on startup. dict_sys_t::create_or_check_sys_tables(): Replaces dict_create_or_check_foreign_constraint_tables() and dict_create_or_check_sys_virtual(). dict_sys_t::load_table(): Replaces dict_table_get_low() and dict_load_table(). dict_sys_t::find_table(): Renamed from get_table(). dict_sys_t::sys_tables_exist(): Check whether all the non-hard-coded tables SYS_FOREIGN, SYS_FOREIGN_COLS, SYS_VIRTUAL exist. trx_t::has_stats_table_lock(): Moved to dict0stats.cc. Some error messages will now report table names in the internal databasename/tablename format, instead of `databasename`.`tablename`.
76 lines
2.7 KiB
Plaintext
76 lines
2.7 KiB
Plaintext
--source include/not_embedded.inc
|
|
--source include/innodb_page_size.inc
|
|
|
|
--echo #
|
|
--echo # Bug#13955083 ALLOW IN-PLACE DDL OPERATIONS ON MISSING
|
|
--echo # OR DISCARDED TABLESPACES
|
|
--echo #
|
|
|
|
--disable_query_log
|
|
call mtr.add_suppression("InnoDB: Cannot open datafile for read-only: ");
|
|
call mtr.add_suppression("InnoDB: Operating system error number .* in a file operation");
|
|
call mtr.add_suppression("InnoDB: The error means the system cannot find the path specified");
|
|
call mtr.add_suppression("InnoDB: Ignoring tablespace for test/\(t\|x@002e@002ed\) because it could not be opened");
|
|
call mtr.add_suppression("InnoDB: Cannot calculate statistics for table .* because the .ibd file is missing");
|
|
call mtr.add_suppression("Could not find a valid tablespace file for");
|
|
call mtr.add_suppression("InnoDB: Failed to find tablespace for table `test`\.`\(t\|x\.\.d\)` in the cache");
|
|
call mtr.add_suppression("InnoDB: Cannot delete tablespace [0-9]+.*not found");
|
|
call mtr.add_suppression("Table .* in the InnoDB data dictionary has tablespace id .*, but tablespace with that id or name does not exist");
|
|
call mtr.add_suppression("InnoDB: ALTER TABLE `test`.`t` DISCARD TABLESPACE failed to find tablespace");
|
|
--enable_query_log
|
|
|
|
let $MYSQLD_DATADIR=`select @@datadir`;
|
|
SET GLOBAL innodb_file_per_table=1;
|
|
CREATE TABLE t(a SERIAL)ENGINE=InnoDB;
|
|
CREATE TABLE `x..d` (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
|
CREATE TABLE t1(a SERIAL)ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(1),(2),(3);
|
|
|
|
--source include/shutdown_mysqld.inc
|
|
|
|
# Remove the tablespace files.
|
|
--remove_file $MYSQLD_DATADIR/test/t.ibd
|
|
--remove_file $MYSQLD_DATADIR/test/x@002e@002ed.ibd
|
|
|
|
--source include/start_mysqld.inc
|
|
|
|
# The table does exist, only the tablespace does not exist.
|
|
--error ER_GET_ERRNO
|
|
SELECT * FROM t;
|
|
|
|
--error ER_GET_ERRNO
|
|
ALTER TABLE t ADD INDEX (a), ALGORITHM=INPLACE;
|
|
SHOW WARNINGS;
|
|
|
|
--error ER_GET_ERRNO
|
|
ALTER TABLE t ADD INDEX (a), ALGORITHM=COPY;
|
|
SHOW WARNINGS;
|
|
|
|
--error ER_GET_ERRNO
|
|
ALTER TABLE t AUTO_INCREMENT=1, ALGORITHM=INPLACE;
|
|
--error ER_GET_ERRNO
|
|
ALTER TABLE t AUTO_INCREMENT=1, ALGORITHM=COPY;
|
|
|
|
--error ER_PARSE_ERROR
|
|
ALTER TABLE t ALGORITHM=INPLACE, DISCARD TABLESPACE;
|
|
--error ER_PARSE_ERROR
|
|
ALTER TABLE t ALGORITHM=COPY, DISCARD TABLESPACE;
|
|
--error ER_PARSE_ERROR
|
|
ALTER TABLE t ALGORITHM=DEFAULT, DISCARD TABLESPACE;
|
|
ALTER TABLE t DISCARD TABLESPACE;
|
|
RENAME TABLE t TO u;
|
|
RENAME TABLE u TO v;
|
|
DROP TABLE v;
|
|
--error ER_GET_ERRNO
|
|
SELECT * FROM `x..d`;
|
|
DROP TABLE `x..d`;
|
|
|
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
|
--error ER_TABLESPACE_DISCARDED
|
|
ALTER TABLE t1 AUTO_INCREMENT=1, ALGORITHM=INPLACE;
|
|
--error ER_TABLESPACE_DISCARDED
|
|
ALTER TABLE t1 AUTO_INCREMENT=1, FORCE, ALGORITHM=INPLACE;
|
|
--error ER_TABLESPACE_DISCARDED
|
|
ALTER TABLE t1 AUTO_INCREMENT=1, ALGORITHM=COPY;
|
|
DROP TABLE t1;
|