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

alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 74292a93d9f IGNITE-23557 SQL Calcite: Fix assertion in COUNT(DISTINCT) 
accumulator - Fixes #11630.
74292a93d9f is described below

commit 74292a93d9f322b99045b266ff12394032da0df0
Author: Vladimir Steshin <[email protected]>
AuthorDate: Fri Nov 8 09:11:52 2024 +0300

    IGNITE-23557 SQL Calcite: Fix assertion in COUNT(DISTINCT) accumulator - 
Fixes #11630.
    
    Signed-off-by: Aleksey Plekhanov <[email protected]>
---
 .../query/calcite/exec/exp/agg/Accumulators.java   | 32 +++++++++++++++-------
 ...ll.test_ignore => test_correlated_any_all.test} | 29 +-------------------
 .../any_all/test_correlated_any_all.test_ignore    |  4 +++
 3 files changed, 27 insertions(+), 38 deletions(-)

diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/Accumulators.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/Accumulators.java
index 21c813e156b..73e3f305620 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/Accumulators.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/Accumulators.java
@@ -265,11 +265,9 @@ public class Accumulators {
 
         /** */
         <T> T get(int idx, Row row) {
-            List<Integer> argList = aggCall.getArgList();
+            assert idx < arguments().size() : "idx=" + idx + "; arguments=" + 
arguments();
 
-            assert idx < argList.size() : "idx=" + idx + "; arglist=" + 
argList;
-
-            return (T)hnd.get(argList.get(idx), row);
+            return (T)hnd.get(arguments().get(idx), row);
         }
 
         /** */
@@ -277,6 +275,11 @@ public class Accumulators {
             return aggCall;
         }
 
+        /** */
+        protected List<Integer> arguments() {
+            return aggCall.getArgList();
+        }
+
         /** */
         int columnCount(Row row) {
             return hnd.columnCount(row);
@@ -504,7 +507,7 @@ public class Accumulators {
 
         /** {@inheritDoc} */
         @Override public void add(Row row) {
-            int argsCnt = aggregateCall().getArgList().size();
+            int argsCnt = arguments().size();
 
             assert argsCnt == 0 || argsCnt == 1;
 
@@ -1200,7 +1203,7 @@ public class Accumulators {
         public ListAggAccumulator(AggregateCall aggCall, RowHandler<Row> hnd) {
             super(aggCall, hnd);
 
-            isDfltSep = aggCall.getArgList().size() <= 1;
+            isDfltSep = arguments().size() <= 1;
         }
 
         /** {@inheritDoc} */
@@ -1333,19 +1336,28 @@ public class Accumulators {
         /** */
         private final Map<Object, Row> rows = new HashMap<>();
 
+        /** */
+        private final List<Integer> args;
+
         /** */
         private DistinctAccumulator(AggregateCall aggCall, RowHandler<Row> 
hnd, Supplier<Accumulator<Row>> accSup) {
             super(aggCall, hnd);
+
             acc = accSup.get();
+
+            args = super.arguments().isEmpty() ? List.of(0) : 
super.arguments();
+        }
+
+        /** */
+        @Override protected List<Integer> arguments() {
+            return args;
         }
 
         /** {@inheritDoc} */
         @Override public void add(Row row) {
-            if (row == null || columnCount(row) == 0 || get(0, row) == null)
-                return;
+            Object key;
 
-            Object key = get(0, row);
-            if (key == null)
+            if (row == null || columnCount(row) == 0 || (key = get(0, row)) == 
null)
                 return;
 
             rows.put(key, row);
diff --git 
a/modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test_ignore
 b/modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test
similarity index 81%
copy from 
modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test_ignore
copy to 
modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test
index c68a40a090e..810860d983d 100644
--- 
a/modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test_ignore
+++ b/modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test
@@ -1,7 +1,6 @@
 # name: test/sql/subquery/any_all/test_correlated_any_all.test
 # description: Test correlated ANY/ALL subqueries
 # group: [any_all]
-# Ignore https://issues.apache.org/jira/browse/IGNITE-15580
 
 statement ok
 PRAGMA enable_verification
@@ -146,31 +145,6 @@ NULL
 1
 1
 
-query T
-SELECT i=ALL(SELECT i FROM integers WHERE i=i1.i OR i IS NULL) FROM integers 
i1 ORDER BY i;
-----
-NULL
-NULL
-NULL
-NULL
-
-# correlated ANY/ALL with aggregations
-query T
-SELECT MIN(i)>ANY(SELECT i FROM integers WHERE i>MIN(i1.i)) FROM integers i1;
-----
-0
-
-query T
-SELECT SUM(i)>ANY(SELECT i FROM integers WHERE i>MIN(i1.i)) FROM integers i1;
-----
-1
-
-# correlated subquery with correlated any
-query T
-SELECT (SELECT SUM(i)+SUM(i1.i) FROM integers)>ANY(SELECT i FROM integers 
WHERE i>MIN(i1.i)) FROM integers i1;
-----
-1
-
 # zero results for all
 query T
 SELECT i=ANY(SELECT i FROM integers WHERE i=i1.i AND i>10) FROM integers i1 
ORDER BY i;
@@ -178,5 +152,4 @@ SELECT i=ANY(SELECT i FROM integers WHERE i=i1.i AND i>10) 
FROM integers i1 ORDE
 0
 0
 0
-0
-
+0
\ No newline at end of file
diff --git 
a/modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test_ignore
 
b/modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test_ignore
index c68a40a090e..039427e8bde 100644
--- 
a/modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test_ignore
+++ 
b/modules/calcite/src/test/sql/subquery/any_all/test_correlated_any_all.test_ignore
@@ -146,6 +146,7 @@ NULL
 1
 1
 
+#Ignore https://issues.apache.org/jira/browse/IGNITE-23555
 query T
 SELECT i=ALL(SELECT i FROM integers WHERE i=i1.i OR i IS NULL) FROM integers 
i1 ORDER BY i;
 ----
@@ -155,17 +156,20 @@ NULL
 NULL
 
 # correlated ANY/ALL with aggregations
+#Ignore https://issues.apache.org/jira/browse/IGNITE-23555
 query T
 SELECT MIN(i)>ANY(SELECT i FROM integers WHERE i>MIN(i1.i)) FROM integers i1;
 ----
 0
 
+# Ignore: 'Aggregate expression is illegal in WHERE clause'
 query T
 SELECT SUM(i)>ANY(SELECT i FROM integers WHERE i>MIN(i1.i)) FROM integers i1;
 ----
 1
 
 # correlated subquery with correlated any
+# Ignore: 'Aggregate expression is illegal in WHERE clause'
 query T
 SELECT (SELECT SUM(i)+SUM(i1.i) FROM integers)>ANY(SELECT i FROM integers 
WHERE i>MIN(i1.i)) FROM integers i1;
 ----

Reply via email to