--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