diff --git a/polardbx-optimizer/src/main/java/com/alibaba/polardbx/optimizer/core/rel/ddl/LogicalAlterTable.java b/polardbx-optimizer/src/main/java/com/alibaba/polardbx/optimizer/core/rel/ddl/LogicalAlterTable.java index 3f118fa5d..8e8e2eb5b 100644 --- a/polardbx-optimizer/src/main/java/com/alibaba/polardbx/optimizer/core/rel/ddl/LogicalAlterTable.java +++ b/polardbx-optimizer/src/main/java/com/alibaba/polardbx/optimizer/core/rel/ddl/LogicalAlterTable.java @@ -1135,6 +1135,7 @@ private AlterTablePreparedData prepareAlterTableData(String tableName) { } } else if (alterItem instanceof SqlDropPrimaryKey) { primaryKeyDropped = true; + droppedIndexes.add("PRIMARY"); } else if (alterItem instanceof SqlAddPrimaryKey) { SqlAddPrimaryKey addPrimaryKey = (SqlAddPrimaryKey) alterItem; for (SqlIndexColumnName indexColumnName : addPrimaryKey.getColumns()) { diff --git a/polardbx-test/src/test/java/com/alibaba/polardbx/qatest/ddl/sharding/ddl/AlterTableTest.java b/polardbx-test/src/test/java/com/alibaba/polardbx/qatest/ddl/sharding/ddl/AlterTableTest.java index 3bdf3b13b..f89d306a9 100644 --- a/polardbx-test/src/test/java/com/alibaba/polardbx/qatest/ddl/sharding/ddl/AlterTableTest.java +++ b/polardbx-test/src/test/java/com/alibaba/polardbx/qatest/ddl/sharding/ddl/AlterTableTest.java @@ -908,6 +908,33 @@ public void testAlterTableDropAddPrimaryKey() throws SQLException { dropTableIfExists(tableName); } + @Test + public void testAlterTableDropAddCompPrimaryKey() { + if (TStringUtil.isNotEmpty(schemaPrefix)) { + return; + } + + String tableName = "drop_add_comp_pk"; + + dropTableIfExists(tableName); + + String sql = "CREATE TABLE " + tableName + " (\n" + + "col1 varchar(255) DEFAULT NULL,\n" + + "col2 varchar(255) NOT NULL,\n" + + "id int(11) NOT NULL AUTO_INCREMENT,\n" + + "PRIMARY KEY (id,col2)\n" + + ") ENGINE = InnoDB DEFAULT CHARSET = utf8"; + JdbcUtil.executeUpdateSuccess(tddlConnection, String.format(sql, tableName)); + + sql = "ALTER TABLE " + tableName + "\n" + + "DROP PRIMARY KEY,\n" + + "DROP COLUMN col2,\n" + + "ADD PRIMARY KEY (id) USING BTREE"; + JdbcUtil.executeUpdateSuccess(tddlConnection, String.format(sql, tableName)); + + dropTableIfExists(tableName); + } + @Test public void testAlterTableDropKey() throws SQLException { if (TStringUtil.isNotEmpty(schemaPrefix)) {