mirror of
https://github.com/MariaDB/server.git
synced 2025-12-01 17:39:21 +03:00
Allow combination of non-instant, non-rebuilding operations with changes of table options that do not require a rebuild. For example, DROP INDEX or ADD INDEX can be performed with ALGORITHM=NOCOPY together with changing such table options. Changing the table options alone would be allowed with ALGORITHM=INSTANT. INNOBASE_ALTER_NOCREATE: A new set of flags, for operations that are refused for ALGORITHM=INSTANT and do not involve creating index trees. Move ALTER_RENAME_INDEX to the proper place (INNOBASE_ALTER_INSTANT). innobase_need_rebuild(): Do not require a rebuild if INNOBASE_ALTER_NOREBUILD operations are combined with ALTER_OPTIONS. ha_innobase::prepare_inplace_alter_table(), ha_innobase::inplace_alter_table(): Use the fast path if ALTER_OPTIONS is combined with INNOBASE_ALTER_NOCREATE. In this case, the actual changes would be deferred to ha_innobase::commit_inplace_alter_table().
34 lines
836 B
SQL
34 lines
836 B
SQL
CREATE TABLE t1(f1 INT PRIMARY KEY, f2 INT NOT NULL,
|
|
f3 INT AS (f2 * f2) VIRTUAL,
|
|
f4 INT NOT NULL UNIQUE,
|
|
f5 INT NOT NULL,
|
|
INDEX`idx`(f2))ENGINE=INNODB;
|
|
|
|
CREATE TABLE t2(f1 INT NOT NULL, f2 INT NOT NULL,
|
|
INDEX(f1),
|
|
FOREIGN KEY `fidx` (f1) REFERENCES t1(f1))ENGINE=INNODB;
|
|
|
|
INSERT INTO t1(f1, f2, f4, f5) VALUES(1, 2, 3, 4);
|
|
|
|
SELECT @@alter_algorithm;
|
|
|
|
--enable_info
|
|
--error $error_code
|
|
--eval ALTER TABLE t1 ADD INDEX idx1(f4), page_compressed=1
|
|
|
|
--error $error_code
|
|
--eval ALTER TABLE t1 DROP INDEX idx, page_compression_level=5
|
|
|
|
--error $error_code
|
|
--eval ALTER TABLE t1 ADD UNIQUE INDEX u1(f2)
|
|
|
|
--error $error_code
|
|
--eval ALTER TABLE t1 DROP INDEX f4, page_compression_level=9
|
|
|
|
SET foreign_key_checks = 0;
|
|
--error $error_code
|
|
--eval ALTER TABLE t1 ADD FOREIGN KEY(f5) REFERENCES t2(f1)
|
|
|
|
DROP TABLE t2, t1;
|
|
--disable_info
|