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