From fcea2b964e06d2f5b8bff39212df96a97e1137b0 Mon Sep 17 00:00:00 2001 From: Pxl Date: Mon, 26 Feb 2024 11:23:04 +0800 Subject: [PATCH] [Chore](materialized-view) forbid create mv have calculations included outside aggregate functions (#31336) forbid create mv have calculations included outside aggregate functions --- .../analysis/CreateMaterializedViewStmt.java | 5 +++++ regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java index 9c120d7004..b9840438ec 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java @@ -288,6 +288,11 @@ public class CreateMaterializedViewStmt extends DdlStmt { // build mv column item mvColumnItemList.add(buildMVColumnItem(analyzer, functionCallExpr)); } else { + if (!isReplay && selectListItemExpr.containsAggregate()) { + throw new AnalysisException( + "The materialized view's expr calculations cannot be included outside aggregate functions" + + ", expr: " + selectListItemExpr.toSql()); + } List slots = new ArrayList<>(); selectListItemExpr.collect(SlotRef.class, slots); if (!isReplay && slots.size() == 0) { diff --git a/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy b/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy index 8d33b107da..bc206b6199 100644 --- a/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy +++ b/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy @@ -115,4 +115,19 @@ suite ("k1s2m3") { qt_select_mv "select count(k2) from d_table where k3 = 1;" qt_select_star "select * from d_table order by k1;" + + test { + sql "create materialized view k1s2m3 as select K1,sum(k2*k3)+1 from d_table group by k1;" + exception "cannot be included outside aggregate" + } + + test { + sql "create materialized view k1s2m3 as select K1,abs(sum(k2*k3)+1) from d_table group by k1;" + exception "cannot be included outside aggregate" + } + + test { + sql "create materialized view k1s2m3 as select K1,sum(abs(sum(k2*k3)+1)) from d_table group by k1;" + exception "aggregate function cannot contain aggregate parameters" + } }