This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-0.15 in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit ded1a3da0a53c5cb1abcb90f0e27ee3a735aa1bd Author: shee <[email protected]> AuthorDate: Wed Oct 13 11:37:39 2021 +0800 fix dup table don't schema schange (#6791) Co-authored-by: qzsee <[email protected]> --- .../apache/doris/alter/SchemaChangeHandler.java | 7 +++-- .../org/apache/doris/alter/AlterJobV2Test.java | 32 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java index 27bfa69..313ad47 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java @@ -1119,6 +1119,7 @@ public class SchemaChangeHandler extends AlterHandler { for (Long alterIndexId : indexSchemaMap.keySet()) { List<Column> originSchema = olapTable.getSchemaByIndexId(alterIndexId); List<Column> alterSchema = indexSchemaMap.get(alterIndexId); + Set<Column> needAlterColumns = Sets.newHashSet(); // 0. check if unchanged boolean hasColumnChange = false; @@ -1128,8 +1129,8 @@ public class SchemaChangeHandler extends AlterHandler { for (int i = 0; i < alterSchema.size(); i++) { Column alterColumn = alterSchema.get(i); if (!alterColumn.equals(originSchema.get(i))) { + needAlterColumns.add(alterColumn); hasColumnChange = true; - break; } } } @@ -1220,7 +1221,7 @@ public class SchemaChangeHandler extends AlterHandler { for (Column alterColumn : alterSchema) { if (alterColumn.nameEquals(partitionCol.getName(), true)) { // 2.1 partition column cannot be modified - if (!alterColumn.equals(partitionCol)) { + if (needAlterColumns.contains(alterColumn)) { throw new DdlException("Can not modify partition column[" + partitionCol.getName() + "]. index[" + olapTable.getIndexNameById(alterIndexId) + "]"); @@ -1249,7 +1250,7 @@ public class SchemaChangeHandler extends AlterHandler { for (Column alterColumn : alterSchema) { if (alterColumn.nameEquals(distributionCol.getName(), true)) { // 3.1 distribution column cannot be modified - if (!alterColumn.equals(distributionCol)) { + if (needAlterColumns.contains(alterColumn)) { throw new DdlException("Can not modify distribution column[" + distributionCol.getName() + "]. index[" + olapTable.getIndexNameById(alterIndexId) + "]"); diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterJobV2Test.java b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterJobV2Test.java index af7ae27..6a25b72 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterJobV2Test.java +++ b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterJobV2Test.java @@ -27,6 +27,7 @@ import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Table; import org.apache.doris.common.Config; import org.apache.doris.common.DdlException; +import org.apache.doris.common.ExceptionChecker; import org.apache.doris.common.FeConstants; import org.apache.doris.qe.ConnectContext; import org.apache.doris.qe.ShowExecutor; @@ -79,6 +80,11 @@ public class AlterJobV2Test { Catalog.getCurrentCatalog().createTable(createTableStmt); } + private static void alterTable(String sql) throws Exception { + AlterTableStmt alterTableStmt = (AlterTableStmt) UtFrameUtils.parseAndAnalyzeStmt(sql, connectContext); + Catalog.getCurrentCatalog().getAlterInstance().processAlterTable(alterTableStmt); + } + @Test public void testSchemaChange() throws Exception { // 1. process a schema change job @@ -185,4 +191,30 @@ public class AlterJobV2Test { Assert.assertTrue(e.getMessage().contains("Nothing is changed")); } } + + @Test + public void testDupTableSchemaChange() throws Exception { + + createTable("CREATE TABLE test.dup_table (\n" + + " k1 bigint(20) NULL ,\n" + + " k2 bigint(20) NULL ,\n" + + " k3 bigint(20) NULL,\n" + + " v1 bigint(20) NULL ,\n" + + " v2 varchar(1) NULL,\n" + + " v3 varchar(1) NULL \n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(k1, k2, k3)\n" + + "PARTITION BY RANGE(k1, v1)\n" + + "(PARTITION p1 VALUES LESS THAN (\"10\", \"10\"))\n" + + "DISTRIBUTED BY HASH(v1,k2) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_num\" = \"1\"\n" + + ");"); + + + alterTable("alter table test.dup_table add rollup r1(v1,v2,k2,k1);"); + Map<Long, AlterJobV2> alterJobs = Catalog.getCurrentCatalog().getRollupHandler().getAlterJobsV2(); + waitAlterJobDone(alterJobs); + ExceptionChecker.expectThrowsNoException(() -> alterTable("alter table test.dup_table modify column v2 varchar(2);")); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
