From 5fdda07452a56551abdb73db590c0752c0d4cb4f Mon Sep 17 00:00:00 2001 From: adofsauron Date: Fri, 2 Dec 2022 15:11:55 +0800 Subject: [PATCH] fix(tianmu): fix ALTER table DROP primary key is forbidden (#1034) --- mysql-test/suite/tianmu/r/issue1034.result | 26 ++++++ mysql-test/suite/tianmu/t/issue1034.test | 98 ++++++++++++++++++++++ storage/tianmu/handler/ha_tianmu.cpp | 4 + 3 files changed, 128 insertions(+) create mode 100644 mysql-test/suite/tianmu/r/issue1034.result create mode 100644 mysql-test/suite/tianmu/t/issue1034.test diff --git a/mysql-test/suite/tianmu/r/issue1034.result b/mysql-test/suite/tianmu/r/issue1034.result new file mode 100644 index 0000000000..1487101d87 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1034.result @@ -0,0 +1,26 @@ +USE test; +set global tianmu_index_search=on; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (id int) ENGINE=TIANMU; +ALTER TABLE t1 ADD PRIMARY KEY(id); +ALTER TABLE t1 DROP PRIMARY KEY; +ALTER TABLE t1 ADD PRIMARY KEY(id); +ALTER TABLE t1 DROP PRIMARY KEY; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (id int PRIMARY KEY) ENGINE=TIANMU; +ALTER TABLE t1 DROP PRIMARY KEY; +ALTER TABLE t1 ADD PRIMARY KEY(id); +ALTER TABLE t1 DROP PRIMARY KEY; +set global tianmu_index_search=off; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (id int) ENGINE=TIANMU; +ALTER TABLE t1 ADD PRIMARY KEY(id); +ALTER TABLE t1 DROP PRIMARY KEY; +ALTER TABLE t1 ADD PRIMARY KEY(id); +ALTER TABLE t1 DROP PRIMARY KEY; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (id int PRIMARY KEY) ENGINE=TIANMU; +ALTER TABLE t1 DROP PRIMARY KEY; +ALTER TABLE t1 ADD PRIMARY KEY(id); +ALTER TABLE t1 DROP PRIMARY KEY; +DROP TABLE t1; diff --git a/mysql-test/suite/tianmu/t/issue1034.test b/mysql-test/suite/tianmu/t/issue1034.test new file mode 100644 index 0000000000..5b87f5c061 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1034.test @@ -0,0 +1,98 @@ +--source include/have_tianmu.inc + +USE test; + +--disable_warnings + +## test with enable the tianmu PRIMARY KEY index + +set global tianmu_index_search=on; + +## DDL no PRIMARY KEY + +DROP TABLE IF EXISTS t1; + +CREATE TABLE t1 (id int) ENGINE=TIANMU; + +## ADD pk + +ALTER TABLE t1 ADD PRIMARY KEY(id); + +## DROP pk + +ALTER TABLE t1 DROP PRIMARY KEY; + +## re ADD pk + +ALTER TABLE t1 ADD PRIMARY KEY(id); + +## re DROP pk + +ALTER TABLE t1 DROP PRIMARY KEY; + +## DDL has PRIMARY KEY + +DROP TABLE IF EXISTS t1; + +CREATE TABLE t1 (id int PRIMARY KEY) ENGINE=TIANMU; + +## DROP pk + +ALTER TABLE t1 DROP PRIMARY KEY; + +## re ADD pk + +ALTER TABLE t1 ADD PRIMARY KEY(id); + +## re DROP pk + +ALTER TABLE t1 DROP PRIMARY KEY; + +## test with disable the tianmu PRIMARY KEY index + +set global tianmu_index_search=off; + +## DDL no PRIMARY KEY + +DROP TABLE IF EXISTS t1; + +CREATE TABLE t1 (id int) ENGINE=TIANMU; + +## ADD pk + +ALTER TABLE t1 ADD PRIMARY KEY(id); + +## DROP pk + +ALTER TABLE t1 DROP PRIMARY KEY; + +## re ADD pk + +ALTER TABLE t1 ADD PRIMARY KEY(id); + +## re DROP pk + +ALTER TABLE t1 DROP PRIMARY KEY; + +## DDL has PRIMARY KEY + +DROP TABLE IF EXISTS t1; + +CREATE TABLE t1 (id int PRIMARY KEY) ENGINE=TIANMU; + +## DROP pk + +ALTER TABLE t1 DROP PRIMARY KEY; + +## re ADD pk + +ALTER TABLE t1 ADD PRIMARY KEY(id); + +## re DROP pk + +ALTER TABLE t1 DROP PRIMARY KEY; + +## clean test TABLE + +DROP TABLE t1; + diff --git a/storage/tianmu/handler/ha_tianmu.cpp b/storage/tianmu/handler/ha_tianmu.cpp index 911db5aabb..b6fe128a58 100644 --- a/storage/tianmu/handler/ha_tianmu.cpp +++ b/storage/tianmu/handler/ha_tianmu.cpp @@ -1573,6 +1573,10 @@ enum_alter_inplace_result ha_tianmu::check_if_supported_inplace_alter([[maybe_un // support alter table: mix add/drop column、order column and other syntaxs to use if (ha_alter_info->handler_flags & TIANMU_SUPPORTED_ALTER_ADD_DROP_ORDER) DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); + if (ha_alter_info->handler_flags & Alter_inplace_info::ADD_PK_INDEX) + DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); + if (ha_alter_info->handler_flags & Alter_inplace_info::DROP_PK_INDEX) + DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); DBUG_RETURN(HA_ALTER_ERROR); }