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;
----