This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new cbfb4a3115 [fix](materialized-view) fix bug that can not create mv for 
list partitioned table (#9281)
cbfb4a3115 is described below

commit cbfb4a311548d053c690f34a12aface9f4c6877c
Author: Mingyu Chen <morningman....@gmail.com>
AuthorDate: Fri Apr 29 10:45:09 2022 +0800

    [fix](materialized-view) fix bug that can not create mv for list 
partitioned table (#9281)
---
 .../java/org/apache/doris/catalog/OlapTable.java   | 20 ++++++-----
 .../org/apache/doris/alter/AlterJobV2Test.java     | 41 +++++++++++++++++++++-
 .../doris/alter/MaterializedViewHandlerTest.java   |  5 ++-
 3 files changed, 53 insertions(+), 13 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index 0038095af1..e108fb82d7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -21,10 +21,10 @@ import org.apache.doris.alter.MaterializedViewHandler;
 import org.apache.doris.analysis.AggregateInfo;
 import org.apache.doris.analysis.ColumnDef;
 import org.apache.doris.analysis.CreateTableStmt;
+import org.apache.doris.analysis.DataSortInfo;
 import org.apache.doris.analysis.Expr;
 import org.apache.doris.analysis.SlotDescriptor;
 import org.apache.doris.analysis.SlotRef;
-import org.apache.doris.analysis.DataSortInfo;
 import org.apache.doris.backup.Status;
 import org.apache.doris.backup.Status.ErrCode;
 import org.apache.doris.catalog.DistributionInfo.DistributionInfoType;
@@ -49,12 +49,12 @@ import org.apache.doris.resource.Tag;
 import org.apache.doris.system.Backend;
 import org.apache.doris.system.SystemInfoService;
 import org.apache.doris.thrift.TOlapTable;
+import org.apache.doris.thrift.TSortType;
 import org.apache.doris.thrift.TStorageFormat;
 import org.apache.doris.thrift.TStorageMedium;
 import org.apache.doris.thrift.TStorageType;
 import org.apache.doris.thrift.TTableDescriptor;
 import org.apache.doris.thrift.TTableType;
-import org.apache.doris.thrift.TSortType;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
@@ -635,17 +635,19 @@ public class OlapTable extends Table {
         return partitionInfo;
     }
 
-    public Set<String> getPartitionColumnNames() {
+    public Set<String> getPartitionColumnNames() throws DdlException {
         Set<String> partitionColumnNames = Sets.newHashSet();
         if (partitionInfo instanceof SinglePartitionInfo) {
             return partitionColumnNames;
+        } else if (partitionInfo instanceof RangePartitionInfo) {
+            RangePartitionInfo rangePartitionInfo = (RangePartitionInfo) 
partitionInfo;
+            return rangePartitionInfo.getPartitionColumns().stream().map(c -> 
c.getName().toLowerCase()).collect(Collectors.toSet());
+        } else if (partitionInfo instanceof ListPartitionInfo) {
+            ListPartitionInfo listPartitionInfo = (ListPartitionInfo) 
partitionInfo;
+            return listPartitionInfo.getPartitionColumns().stream().map(c -> 
c.getName().toLowerCase()).collect(Collectors.toSet());
+        } else {
+            throw new DdlException("Unknown partition info type: " + 
partitionInfo.getType().name());
         }
-        RangePartitionInfo rangePartitionInfo = (RangePartitionInfo) 
partitionInfo;
-        List<Column> partitionColumns = 
rangePartitionInfo.getPartitionColumns();
-        for (Column column : partitionColumns) {
-            partitionColumnNames.add(column.getName().toLowerCase());
-        }
-        return partitionColumnNames;
     }
 
     public DistributionInfo getDefaultDistributionInfo() {
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 6a25b72892..2bb1842b36 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
@@ -19,6 +19,7 @@ package org.apache.doris.alter;
 
 import org.apache.doris.analysis.AlterTableStmt;
 import org.apache.doris.analysis.CreateDbStmt;
+import org.apache.doris.analysis.CreateMaterializedViewStmt;
 import org.apache.doris.analysis.CreateTableStmt;
 import org.apache.doris.analysis.ShowAlterStmt;
 import org.apache.doris.catalog.Catalog;
@@ -85,6 +86,11 @@ public class AlterJobV2Test {
         
Catalog.getCurrentCatalog().getAlterInstance().processAlterTable(alterTableStmt);
     }
 
+    private static void createMaterializedView(String sql) throws Exception {
+        CreateMaterializedViewStmt stmt = (CreateMaterializedViewStmt) 
UtFrameUtils.parseAndAnalyzeStmt(sql, connectContext);
+        
Catalog.getCurrentCatalog().getAlterInstance().processCreateMaterializedView(stmt);
+    }
+
     @Test
     public void testSchemaChange() throws Exception {
         // 1. process a schema change job
@@ -138,7 +144,7 @@ public class AlterJobV2Test {
         System.out.println(showResultSet.getMetaData());
         System.out.println(showResultSet.getResultRows());
     }
-    
+
     @Test
     @Deprecated
     public void testAlterSegmentV2() throws Exception {
@@ -217,4 +223,37 @@ public class AlterJobV2Test {
         waitAlterJobDone(alterJobs);
         ExceptionChecker.expectThrowsNoException(() -> alterTable("alter table 
test.dup_table modify column v2 varchar(2);"));
     }
+
+    @Test
+    public void testCreateMVForListPartitionTable() throws Exception {
+        createTable("CREATE TABLE test.list_tbl (\n" +
+                "city VARCHAR(20) NOT NULL,\n" +
+                "user_id BIGINT NOT NULL,\n" +
+                "date DATE NOT NULL,\n" +
+                "age SMALLINT NOT NULL,\n" +
+                "sex TINYINT NOT NULL,\n" +
+                "cost BIGINT NOT NULL DEFAULT \"0\"\n" +
+                ") DUPLICATE KEY(city) PARTITION BY LIST(city) (\n" +
+                "PARTITION p_bj\n" +
+                "VALUES IN (\"beijing\"),\n" +
+                "PARTITION p_gz\n" +
+                "VALUES IN (\"guangzhou\"),\n" +
+                "PARTITION p_sz\n" +
+                "VALUES IN (\"shenzhen\")\n" +
+                ") DISTRIBUTED BY HASH(date) BUCKETS 1 
PROPERTIES(\"replication_num\" = \"1\");");
+
+        createMaterializedView("create materialized view list_view as\n" +
+                "select city,\n" +
+                "user_id,\n" +
+                "date,\n" +
+                "sum(cost)\n" +
+                "from\n" +
+                "test.list_tbl\n" +
+                "group by\n" +
+                "city,\n" +
+                "user_id,\n" +
+                "date;");
+        Map<Long, AlterJobV2> alterJobs = 
Catalog.getCurrentCatalog().getRollupHandler().getAlterJobsV2();
+        waitAlterJobDone(alterJobs);
+    }
 }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/alter/MaterializedViewHandlerTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/alter/MaterializedViewHandlerTest.java
index e33f840ffa..b852d64785 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/alter/MaterializedViewHandlerTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/alter/MaterializedViewHandlerTest.java
@@ -27,6 +27,7 @@ import org.apache.doris.catalog.MaterializedIndex;
 import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.Partition;
 import org.apache.doris.catalog.Type;
+import org.apache.doris.common.DdlException;
 import org.apache.doris.common.jmockit.Deencapsulation;
 
 import com.google.common.collect.Lists;
@@ -272,10 +273,9 @@ public class MaterializedViewHandlerTest {
         }
     }
 
-
     @Test
     public void checkInvalidPartitionKeyMV(@Injectable 
CreateMaterializedViewStmt createMaterializedViewStmt,
-                                           @Injectable OlapTable olapTable) {
+                                           @Injectable OlapTable olapTable) 
throws DdlException {
         final String mvName = "mv1";
         final String columnName1 = "k1";
         Column baseColumn1 = new Column(columnName1, Type.VARCHAR, true, null, 
"", "");
@@ -308,7 +308,6 @@ public class MaterializedViewHandlerTest {
         }
     }
 
-
     @Test
     public void testCheckDropMaterializedView(@Injectable OlapTable olapTable, 
@Injectable Partition partition,
                                               @Injectable MaterializedIndex 
materializedIndex) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to