This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch branch-1.1-lts
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 8e111723746ec5111345c4410e827449410abe61
Author: ZenoYang <[email protected]>
AuthorDate: Thu Sep 8 14:55:50 2022 +0800

    [fix](grouping sets) grouping sets cause be core or return wrong results 
(#12313)
---
 be/src/exec/broker_reader.cpp                      |  2 +-
 .../java/org/apache/doris/analysis/SelectStmt.java | 25 ++++++++++++++++------
 2 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/be/src/exec/broker_reader.cpp b/be/src/exec/broker_reader.cpp
index aea301aa98..28db1d9c46 100644
--- a/be/src/exec/broker_reader.cpp
+++ b/be/src/exec/broker_reader.cpp
@@ -115,7 +115,7 @@ Status BrokerReader::open() {
     // TODO(cmy): The file size is no longer got from openReader() method.
     // But leave the code here for compatibility.
     // This will be removed later.
-    if (response.->__isset.size) {
+    if (response->__isset.size) {
         _file_size = response->size;
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
index 81df81d7f7..b7ef73a2d6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
@@ -442,13 +442,16 @@ public class SelectStmt extends QueryStmt {
             }
         }
         if (groupByClause != null && groupByClause.isGroupByExtension()) {
+            ArrayList<Expr> aggFnExprList = new ArrayList<>();
             for (SelectListItem item : selectList.getItems()) {
-                if (item.getExpr() instanceof FunctionCallExpr && 
item.getExpr().fn instanceof AggregateFunction) {
+                aggFnExprList.clear();
+                getAggregateFnExpr(item.getExpr(), aggFnExprList);
+                for (Expr aggFnExpr : aggFnExprList) {
                     for (Expr expr : groupByClause.getGroupingExprs()) {
-                        if (item.getExpr().contains(expr)) {
-                            throw new AnalysisException("column: " + 
expr.toSql() + " cannot both in select list and "
-                                    + "aggregate functions when using GROUPING 
SETS/CUBE/ROLLUP, please use union"
-                                    + " instead.");
+                        if (aggFnExpr.contains(expr)) {
+                            throw new AnalysisException("column: " + 
expr.toSql() + " cannot both in select "
+                                    + "list and aggregate functions when using 
GROUPING SETS/CUBE/ROLLUP, "
+                                    + "please use union instead.");
                         }
                     }
                 }
@@ -1892,7 +1895,7 @@ public class SelectStmt extends QueryStmt {
     private boolean checkGroupingFn(Expr expr) {
         if (expr instanceof GroupingFunctionCallExpr) {
             return true;
-        } else if (expr.getChildren() != null && expr.getChildren().size() > 
0) {
+        } else if (expr.getChildren() != null) {
             for (Expr child : expr.getChildren()) {
                 if (checkGroupingFn(child)) {
                     return true;
@@ -1902,6 +1905,16 @@ public class SelectStmt extends QueryStmt {
         return false;
     }
 
+    private void getAggregateFnExpr(Expr expr, ArrayList<Expr> aggFnExprList) {
+        if (expr instanceof FunctionCallExpr && expr.fn instanceof 
AggregateFunction) {
+            aggFnExprList.add(expr);
+        } else if (expr.getChildren() != null) {
+            for (Expr child : expr.getChildren()) {
+                getAggregateFnExpr(child, aggFnExprList);
+            }
+        }
+    }
+
     @Override
     public int hashCode() {
         return id.hashCode();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to