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

84 lines
2.5 KiB
Plaintext

--source suite/xengine/include/have_xengine.inc
--source include/have_debug.inc
--disable_warnings
drop table if exists t1;
--enable_warnings
# test adding duplicate value before unique index
CREATE TABLE t1 (a INT DEFAULT 0, b INT, PRIMARY KEY ka(a)) ENGINE=XEngine;
INSERT INTO t1 (a, b) VALUES (1, 5);
INSERT INTO t1 (a, b) VALUES (2, 6);
INSERT INTO t1 (a, b) VALUES (3, 7);
INSERT INTO t1 (a,b) VALUES (4,5);
# should cause error here, duplicate value on b
--error 1062
ALTER TABLE t1 ADD UNIQUE INDEX kb(b), ALGORITHM=INPLACE;
SHOW CREATE TABLE t1;
DROP TABLE t1;
# test dup value AFTER unique index
CREATE TABLE t1 (a INT DEFAULT 0, b INT, PRIMARY KEY ka(a)) ENGINE=XEngine;
INSERT INTO t1 (a, b) VALUES (1, 5);
INSERT INTO t1 (a, b) VALUES (2, 6);
INSERT INTO t1 (a, b) VALUES (3, 7);
ALTER TABLE t1 ADD UNIQUE INDEX kb(b), ALGORITHM=INPLACE;
# should error here, duplicate value on b
--error 1062
INSERT INTO t1 (a,b) VALUES (4,5);
# should succeed
INSERT INTO t1 (a,b) VALUES (5,8);
SHOW CREATE TABLE t1;
SELECT * FROM t1 FORCE INDEX(kb);
DROP TABLE t1;
# test what happens when duplicate nulls exist
CREATE TABLE t1 (a INT DEFAULT 0, b INT, PRIMARY KEY ka(a)) ENGINE=XEngine;
INSERT INTO t1 (a, b) VALUES (1, 5);
INSERT INTO t1 (a, b) VALUES (2, NULL);
INSERT INTO t1 (a, b) VALUES (3, NULL);
# should pass, because in MySQL we allow multiple NULLS in unique key
ALTER TABLE t1 ADD UNIQUE INDEX kb(b), ALGORITHM=INPLACE;
INSERT INTO t1 (a, b) VALUES (4, NULL);
SHOW CREATE TABLE t1;
SELECT COUNT(*) FROM t1 FORCE INDEX(kb);
DROP TABLE t1;
## test case with multi-part key with nulls
CREATE TABLE t1 (a INT DEFAULT 0, b INT, c INT, PRIMARY KEY ka(a)) ENGINE=XEngine;
INSERT INTO t1 (a,b,c) VALUES (1,1,NULL);
INSERT INTO t1 (a,b,c) VALUES (2,1,NULL);
INSERT INTO t1 (a,b,c) VALUES (3,1,NULL);
INSERT INTO t1 (a,b,c) VALUES (4,1,5);
# should pass
ALTER TABLE t1 ADD UNIQUE INDEX kbc(b,c), ALGORITHM=INPLACE;
SHOW CREATE TABLE t1;
SELECT COUNT(*) FROM t1 FORCE INDEX(kbc);
DROP TABLE t1;
## test case with table w/ no primary key, and we try to add unique key
CREATE TABLE t1 (a INT, b INT) ENGINE=XEngine;
INSERT INTO t1 (a, b) VALUES (1, 5);
INSERT INTO t1 (a, b) VALUES (2, 6);
INSERT INTO t1 (a, b) VALUES (3, 7);
# should succeed, we can add unique index on table w/ no pk
ALTER TABLE t1 ADD UNIQUE INDEX kb(b);
INSERT INTO t1 (a, b) VALUES (4, 8);
--error ER_DUP_ENTRY
INSERT INTO t1 (a, b) VALUES (5, 5);
SHOW CREATE TABLE t1;
DROP TABLE t1;
--source suite/xengine/include/check_xengine_log_error.inc