You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2021/12/26 03:06:00 UTC
[incubator-doris] branch master updated: [fix](grouping-set) Grouping set clause act wrong for function expr in view (#7410) (#7411)
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 98551f8 [fix](grouping-set) Grouping set clause act wrong for function expr in view (#7410) (#7411)
98551f8 is described below
commit 98551f8e5e1bf9ec6083fb5f901a242983dc4446
Author: tianhui5 <82...@qq.com>
AuthorDate: Sun Dec 26 11:05:48 2021 +0800
[fix](grouping-set) Grouping set clause act wrong for function expr in view (#7410) (#7411)
Fix #7410
---
.../java/org/apache/doris/planner/RepeatNode.java | 21 +++++++++++++++++++++
.../org/apache/doris/planner/QueryPlanTest.java | 9 +++++++++
2 files changed, 30 insertions(+)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/RepeatNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/RepeatNode.java
index cc8ab6f..ba5c232 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/RepeatNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/RepeatNode.java
@@ -19,6 +19,7 @@ package org.apache.doris.planner;
import org.apache.doris.analysis.Analyzer;
import org.apache.doris.analysis.Expr;
+import org.apache.doris.analysis.FunctionCallExpr;
import org.apache.doris.analysis.GroupByClause;
import org.apache.doris.analysis.GroupingFunctionCallExpr;
import org.apache.doris.analysis.GroupingInfo;
@@ -155,6 +156,14 @@ public class RepeatNode extends PlanNode {
slotIdSet.add(slotId);
break;
}
+ } else if (exprList.get(i) instanceof FunctionCallExpr) {
+ List<SlotRef> slotRefs = getSlotRefChildren(exprList.get(i));
+ for (SlotRef slotRef : slotRefs) {
+ if (bitSet.get(i) && slotRef.getSlotId() == slotId) {
+ slotIdSet.add(slotId);
+ break;
+ }
+ }
}
}
}
@@ -175,6 +184,18 @@ public class RepeatNode extends PlanNode {
createDefaultSmap(analyzer);
}
+ private List<SlotRef> getSlotRefChildren(Expr root) {
+ List<SlotRef> result = new ArrayList<>();
+ for (Expr child : root.getChildren()) {
+ if (child instanceof SlotRef) {
+ result.add((SlotRef) child);
+ } else {
+ result.addAll(getSlotRefChildren(child));
+ }
+ }
+ return result;
+ }
+
@Override
protected void toThrift(TPlanNode msg) {
msg.node_type = TPlanNodeType.REPEAT_NODE;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
index 5c7f098..8e31fbf 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
@@ -404,6 +404,8 @@ public class QueryPlanTest {
createView("create view test.tbl_null_column_view AS SELECT *,NULL as add_column FROM test.test1;");
+ createView("create view test.function_view AS SELECT query_id, client_ip, concat(user, db) as concat FROM test.test1;");
+
}
@AfterClass
@@ -422,6 +424,13 @@ public class QueryPlanTest {
}
@Test
+ public void testFunctionViewGroupingSet() throws Exception {
+ String queryStr = "select query_id, client_ip, concat from test.function_view group by rollup(query_id, client_ip, concat);";
+ String explainStr = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);
+ Assert.assertTrue(explainStr.contains("repeat: repeat 3 lines [[], [0], [0, 1], [0, 1, 2, 3]]"));
+ }
+
+ @Test
public void testBitmapInsertInto() throws Exception {
String queryStr = "explain INSERT INTO test.bitmap_table (id, id2) VALUES (1001, to_bitmap(1000)), (1001, to_bitmap(2000));";
String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org