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 <827677...@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-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org