polardbxengine/mysql-test/suite/xengine/t/online_ddl_rebuild_check.test

337 lines
21 KiB
Plaintext

--echo ##########
--echo # Test online ddl without rebuild and with rebuild
--echo ##########
--echo ##########
--echo # case 1 Test online inplace DDL no rebuild, which means all old subtable should be kept as same
--echo ##########
--echo # BUG#23983934
--echo # https://work.aone.alibaba-inc.com/issue/23983934
--echo #############################################################
--echo # case 1.1 add new key, INDEX_ID of old key should be kept as same
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, name CHAR(30), room INT, code INT, score FLOAT, UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, '张三', 1, 128, 80), (2, '李四', 2, 256, 90);
--replace_column 10 #
EXPLAIN SELECT code from t;
SELECT code from t;
--echo # add new secondary key
ALTER TABLE t ADD INDEX sk(score), ADD UNIQUE INDEX idx_room(room);
--replace_column 10 #
EXPLAIN SELECT code from t;
SELECT code from t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $assert_text = subtable of of pk and uk should not be changed after adding new key
--let $assert_cond = "$old_pk_index_no" = "$new_pk_index_no" AND "$old_uk_index_no" = "$new_uk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 1.2 drop secondary key, INDEX_ID of PRIMARY key should be kept as same
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, name CHAR(30), code INT, UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, '张三', 128), (2, '李四', 256);
SELECT * from t;
--echo # drop secondary key
ALTER TABLE t DROP INDEX uk;
SELECT * from t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk should not be changed after dropping secondery key
--let $assert_cond = "$old_pk_index_no" = "$new_pk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 1.3 rename secondary key, INDEX_ID of the key should be kept as same
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, name CHAR(30), code INT, UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, '张三', 128), (2, '李四', 256);
--replace_column 10 #
EXPLAIN SELECT code from t;
SELECT code from t;
--echo # rename secondary key
ALTER TABLE t RENAME INDEX uk TO uk_c;
--replace_column 10 #
EXPLAIN SELECT code from t;
SELECT code from t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk_c', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk and uk should not be changed after rename secondary key
--let $assert_cond = "$old_pk_index_no" = "$new_pk_index_no" AND "$old_uk_index_no" = "$new_uk_index_no"
--source include/assert.inc
--echo # change index visibility
ALTER TABLE t ALTER INDEX uk_c INVISIBLE;
SHOW CREATE TABLE t;
--replace_column 10 #
EXPLAIN SELECT code from t;
SELECT code from t;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk_c', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk and uk should not be changed after changine visibility of index
--let $assert_cond = "$old_pk_index_no" = "$new_pk_index_no" AND "$old_uk_index_no" = "$new_uk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 1.4 rename column of index, INDEX_ID of the index should be kept as same
--echo #############################################################
CREATE TABLE t(i INT PRIMARY KEY, name CHAR(30), code INT, KEY sk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, '张三', 128), (2, '李四', 256);
SELECT * FROM t;
--echo # rename column of PRIMARY key
ALTER TABLE t RENAME COLUMN i TO id, ALGORITHM=INPLACE;
SELECT * FROM t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk and sk should not be changed after renaming column of pk
--let $assert_cond = "$old_pk_index_no" = "$new_pk_index_no" AND "$old_sk_index_no" = "$new_sk_index_no"
--source include/assert.inc
--echo # rename column of secondary key
ALTER TABLE t RENAME COLUMN code TO cd, ALGORITHM=INPLACE;
--replace_column 10 #
EXPLAIN SELECT cd FROM t;
SELECT cd FROM t;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk and sk should not be changed after renaming name of sk
--let $assert_cond = "$old_pk_index_no" = "$new_pk_index_no" AND "$old_sk_index_no" = "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 1.5 extend varchar size within same pack length, INDEX_ID of the index should be kept as same
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, name VARCHAR(70), KEY sk_nm(name)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, '张三'), (2, '李四');
SELECT * FROM t;
--echo # extend varchar column
ALTER TABLE t MODIFY COLUMN name VARCHAR(120), ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk and sk should not be changed after extending varchar column
--let $assert_cond = "$old_pk_index_no" = "$new_pk_index_no" AND "$old_sk_index_no" = "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 1.6 change comment of key, INDEX_ID of the index should be kept as same
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, name VARCHAR(70), KEY sk_nm(name)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, '张三'), (2, '李四');
SELECT * FROM t;
--echo # extend varchar column
ALTER TABLE t DROP KEY sk_nm, ADD KEY sk_nm(name) COMMENT 'key on name', ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk and sk should not be changed after changing comment of index
--let $assert_cond = "$old_pk_index_no" = "$new_pk_index_no" AND "$old_sk_index_no" = "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo ##########
--echo # case 2 Test online inplace DDL with rebuild, which means index number of all old subtable should be channged
--echo ##########
--echo #############################################################
--echo # case 2.1 add new primary key, INDEX_ID of all existing keys should be changed
--echo #############################################################
CREATE TABLE t(id INT NOT NULL, name VARCHAR(40), code INT, KEY sk(name), UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, '张三', 128), (2, '李四', 256);
ALTER TABLE t ADD PRIMARY KEY(id), ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
SELECT name FROM t;
SELECT code FROM t;
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of uk and sk should not be changed after changing comment of index
--let $assert_cond = "$old_uk_index_no" != "$new_uk_index_no" AND "$old_sk_index_no" != "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 2.2 modify primary key, INDEX_ID of all existing keys should be changed
--echo #############################################################
CREATE TABLE t(id INT NOT NULL, col INT PRIMARY KEY, name VARCHAR(40), code INT, KEY sk(name), UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, 1, '张三', 128), (2, 4, '李四', 256);
ALTER TABLE t DROP COLUMN col, ADD PRIMARY KEY(id), ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
SELECT name FROM t;
SELECT code FROM t;
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of uk and sk should not be changed after changing comment of index
--let $assert_cond = "$old_uk_index_no" != "$new_uk_index_no" AND "$old_sk_index_no" != "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 2.3 set non-nullable column nullable, INDEX_ID of all existing keys should be changed
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, col INT NOT NULL, name VARCHAR(40), code INT, KEY sk(name), UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, 1, '张三', 128), (2, 4, '李四', 256);
ALTER TABLE t MODIFY COLUMN col INT, ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
SELECT name FROM t;
SELECT code FROM t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk, uk and sk should not be changed after changing comment of index
--let $assert_cond = "$old_pk_index_no" != "$new_pk_index_no" AND "$old_uk_index_no" != "$new_uk_index_no" AND "$old_sk_index_no" != "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 2.4 set nullable column non-nullable, INDEX_ID of all existing keys should be changed
--echo #############################################################
#only strict sql_mode support null-->not null
SET @save_sql_mode = @@sql_mode;
SET SQL_MODE = "STRICT_TRANS_TABLES";
CREATE TABLE t(id INT PRIMARY KEY, col INT, name VARCHAR(40), code INT, KEY sk(name), UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, 1, '张三', 128), (2, 4, '李四', 256);
ALTER TABLE t MODIFY COLUMN col INT NOT NULL, ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
SELECT name FROM t;
SELECT code FROM t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk, uk and sk should not be changed after changing comment of index
--let $assert_cond = "$old_pk_index_no" != "$new_pk_index_no" AND "$old_uk_index_no" != "$new_uk_index_no" AND "$old_sk_index_no" != "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
SET SQL_MODE = @save_sql_mode;
--echo #############################################################
--echo # case 2.5 insert column, INDEX_ID of all existing keys should be changed
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, name VARCHAR(40), code INT, KEY sk(name), UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, '张三', 128), (2, '李四', 256);
ALTER TABLE t ADD COLUMN col INT AFTER id, ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
SELECT name FROM t;
SELECT code FROM t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk, uk and sk should not be changed after changing comment of index
--let $assert_cond = "$old_pk_index_no" != "$new_pk_index_no" AND "$old_uk_index_no" != "$new_uk_index_no" AND "$old_sk_index_no" != "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 2.6 reorder a column, INDEX_ID of all existing keys should be changed
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, col INT, name VARCHAR(40), code INT, KEY sk(name), UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, 1, '张三', 128), (2, 4, '李四', 256);
ALTER TABLE t MODIFY COLUMN col INT AFTER name, ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
SELECT name FROM t;
SELECT code FROM t;
SELECT * FROM t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk, uk and sk should not be changed after changing comment of index
--let $assert_cond = "$old_pk_index_no" != "$new_pk_index_no" AND "$old_uk_index_no" != "$new_uk_index_no" AND "$old_sk_index_no" != "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--echo #############################################################
--echo # case 2.7 drop a column, INDEX_ID of all existing keys should be changed
--echo #############################################################
CREATE TABLE t(id INT PRIMARY KEY, col INT, name VARCHAR(40), code INT, KEY sk(name), UNIQUE KEY uk(code)) ENGINE=XENGINE;
--let $old_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $old_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $old_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
INSERT INTO t VALUES (1, 1, '张三', 128), (2, 4, '李四', 256);
ALTER TABLE t DROP COLUMN col, ALGORITHM=INPLACE;
SHOW CREATE TABLE t;
SELECT name FROM t;
SELECT code FROM t;
--let $new_pk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='PRIMARY', INDEX_NUMBER, 1)
--let $new_uk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='uk', INDEX_NUMBER, 1)
--let $new_sk_index_no=query_get_value(SELECT INDEX_NUMBER FROM INFORMATION_SCHEMA.XENGINE_DDL WHERE TABLE_NAME='t' AND INDEX_NAME='sk', INDEX_NUMBER, 1)
--let $assert_text = subtable of pk, uk and sk should not be changed after changing comment of index
--let $assert_cond = "$old_pk_index_no" != "$new_pk_index_no" AND "$old_uk_index_no" != "$new_uk_index_no" AND "$old_sk_index_no" != "$new_sk_index_no"
--source include/assert.inc
DROP TABLE t;
--source suite/xengine/include/check_xengine_log_error.inc