This is an automated email from the ASF dual-hosted git repository. morningman 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 173bc09 [Alter]Analyze define expr before replay Rollup job (#4236) 173bc09 is described below commit 173bc09833aa62c5bf08e02e23a57c0b7a91e75f Author: EmmyMiao87 <522274...@qq.com> AuthorDate: Wed Aug 5 21:47:18 2020 +0800 [Alter]Analyze define expr before replay Rollup job (#4236) The define expr should be analyzed after replay RollupJob. The slot desc of define expr is used to transfrom to thrift and send to backend. --- .../java/org/apache/doris/alter/RollupJobV2.java | 31 +++++++++++++++------- .../org/apache/doris/alter/RollupJobV2Test.java | 12 ++++++--- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java b/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java index 4ee5870..81c25a2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java @@ -17,8 +17,10 @@ package org.apache.doris.alter; +import org.apache.doris.analysis.Analyzer; import org.apache.doris.analysis.CreateMaterializedViewStmt; import org.apache.doris.analysis.Expr; +import org.apache.doris.analysis.MVColumnItem; import org.apache.doris.analysis.SqlParser; import org.apache.doris.analysis.SqlScanner; import org.apache.doris.catalog.Catalog; @@ -45,8 +47,10 @@ import org.apache.doris.common.util.SqlParserUtils; import org.apache.doris.common.util.TimeUtils; import org.apache.doris.persist.gson.GsonPostProcessable; import org.apache.doris.persist.gson.GsonUtils; +import org.apache.doris.qe.ConnectContext; import org.apache.doris.qe.OriginStatement; import org.apache.doris.qe.SqlModeHelper; +import org.apache.doris.system.SystemInfoService; import org.apache.doris.task.AgentBatchTask; import org.apache.doris.task.AgentTask; import org.apache.doris.task.AgentTaskExecutor; @@ -731,11 +735,11 @@ public class RollupJobV2 extends AlterJobV2 implements GsonPostProcessable { this.jobState = jobState; } - private void setColumnsDefineExpr(Map<String, Expr> columnNameToDefineExpr) { - for (Entry<String, Expr> entry : columnNameToDefineExpr.entrySet()) { + private void setColumnsDefineExpr(List<MVColumnItem> mvColumnItemList) { + for (MVColumnItem mvColumnItem : mvColumnItemList) { for (Column column : rollupSchema) { - if (column.getName().equals(entry.getKey())) { - column.setDefineExpr(entry.getValue()); + if (column.getName().equals(mvColumnItem.getName())) { + column.setDefineExpr(mvColumnItem.getDefineExpr()); break; } } @@ -805,16 +809,25 @@ public class RollupJobV2 extends AlterJobV2 implements GsonPostProcessable { if (origStmt == null) { return; } + + if (jobState != JobState.PENDING) { + return; + } // parse the define stmt to schema SqlParser parser = new SqlParser(new SqlScanner(new StringReader(origStmt.originStmt), - SqlModeHelper.MODE_DEFAULT)); - CreateMaterializedViewStmt stmt; + SqlModeHelper.MODE_DEFAULT)); + ConnectContext connectContext = new ConnectContext(); + connectContext.setCluster(SystemInfoService.DEFAULT_CLUSTER); + connectContext.setDatabase(Catalog.getCurrentCatalog().getDb(dbId).getFullName()); + Analyzer analyzer = new Analyzer(Catalog.getCurrentCatalog(), connectContext); + CreateMaterializedViewStmt stmt = null; try { stmt = (CreateMaterializedViewStmt) SqlParserUtils.getStmt(parser, origStmt.idx); - Map<String, Expr> columnNameToDefineExpr = stmt.parseDefineExprWithoutAnalyze(); - setColumnsDefineExpr(columnNameToDefineExpr); + stmt.analyze(analyzer); } catch (Exception e) { - throw new IOException("error happens when parsing create materialized view stmt: " + origStmt, e); + // Under normal circumstances, the stmt will not fail to analyze. + throw new IOException("error happens when parsing create materialized view stmt: " + stmt, e); } + setColumnsDefineExpr(stmt.getMVColumnItemList()); } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/RollupJobV2Test.java b/fe/fe-core/src/test/java/org/apache/doris/alter/RollupJobV2Test.java index 6fb4d06..7293740 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/alter/RollupJobV2Test.java +++ b/fe/fe-core/src/test/java/org/apache/doris/alter/RollupJobV2Test.java @@ -28,6 +28,7 @@ import org.apache.doris.analysis.CreateMaterializedViewStmt; import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.FunctionCallExpr; import org.apache.doris.analysis.FunctionName; +import org.apache.doris.analysis.MVColumnItem; import org.apache.doris.analysis.SlotRef; import org.apache.doris.analysis.TableName; import org.apache.doris.catalog.AggregateType; @@ -371,6 +372,7 @@ public class RollupJobV2Test { @Test public void testSerializeOfRollupJob(@Mocked CreateMaterializedViewStmt stmt) throws IOException, AnalysisException { + Config.enable_materialized_view = true; // prepare file File file = new File(fileName); file.createNewFile(); @@ -395,12 +397,14 @@ public class RollupJobV2Test { List<Expr> params = Lists.newArrayList(); SlotRef param1 = new SlotRef(new TableName(null, "test"), "c1"); params.add(param1); - Map<String, Expr> columnNameToDefineExpr = Maps.newHashMap(); - columnNameToDefineExpr.put(mvColumnName, new FunctionCallExpr(new FunctionName("to_bitmap"), params)); + MVColumnItem mvColumnItem = new MVColumnItem(mvColumnName, Type.BITMAP); + mvColumnItem.setDefineExpr(new FunctionCallExpr(new FunctionName("to_bitmap"), params)); + List<MVColumnItem> mvColumnItemList = Lists.newArrayList(); + mvColumnItemList.add(mvColumnItem); new Expectations() { { - stmt.parseDefineExprWithoutAnalyze(); - result = columnNameToDefineExpr; + stmt.getMVColumnItemList(); + result = mvColumnItemList; } }; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org