This is an automated email from the ASF dual-hosted git repository.
zstan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new edae5218a6 IGNITE-19401 Sql. Correct processing count(distinct)
without arguments (#2106)
edae5218a6 is described below
commit edae5218a68b8e7d2bcbd662c1613e8448ac9065
Author: Evgeniy Stanilovskiy <[email protected]>
AuthorDate: Mon May 27 10:44:59 2024 +0300
IGNITE-19401 Sql. Correct processing count(distinct) without arguments
(#2106)
---
.../subquery/any_all/test_correlated_any_all.test | 23 ++--
.../scalar/test_grouped_correlated_subquery.test | 117 ++++++++++++++++++
.../test_grouped_correlated_subquery.test_ignore | 137 ---------------------
.../engine/exec/exp/agg/AccumulatorsFactory.java | 18 ++-
.../sql/engine/exec/rel/BaseAggregateTest.java | 101 ++++++++++++++-
.../exec/rel/HashAggregateExecutionTest.java | 36 ++++--
.../exec/rel/SortAggregateExecutionTest.java | 34 +++--
7 files changed, 286 insertions(+), 180 deletions(-)
diff --git
a/modules/sql-engine/src/integrationTest/sql/subquery/any_all/test_correlated_any_all.test
b/modules/sql-engine/src/integrationTest/sql/subquery/any_all/test_correlated_any_all.test
index 91c8b7f6d8..f26c48aa2e 100644
---
a/modules/sql-engine/src/integrationTest/sql/subquery/any_all/test_correlated_any_all.test
+++
b/modules/sql-engine/src/integrationTest/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-19401
# Ignore https://issues.apache.org/jira/browse/IGNITE-19402
statement ok
@@ -30,8 +29,6 @@ false
true
NULL
-# Ignore https://issues.apache.org/jira/browse/IGNITE-19401
-skipif ignite3
query T
SELECT i=ALL(SELECT i FROM integers WHERE i<>i1.i) FROM integers i1 ORDER BY i;
----
@@ -48,8 +45,6 @@ SELECT i FROM integers i1 WHERE i=ANY(SELECT i FROM integers
WHERE i=i1.i) ORDER
2
3
-# Ignore https://issues.apache.org/jira/browse/IGNITE-19401
-skipif ignite3
query I
SELECT i FROM integers i1 WHERE i<>ANY(SELECT i FROM integers WHERE i=i1.i)
ORDER BY i;
----
@@ -69,8 +64,6 @@ SELECT i FROM integers i1 WHERE i>ALL(SELECT (i+i1.i-1)/2
FROM integers WHERE i
----
3
-# Ignore https://issues.apache.org/jira/browse/IGNITE-19401
-skipif ignite3
# if there is i=ANY() where the subquery returns an EMPTY result set and
i=NULL, the result becomes FALSE instead
# of NULL
query T
@@ -97,8 +90,6 @@ false
false
true
-# Ignore https://issues.apache.org/jira/browse/IGNITE-19401
-skipif ignite3
query T
SELECT i<>ANY(SELECT i FROM integers WHERE i=i1.i) FROM integers i1 ORDER BY i;
----
@@ -107,8 +98,6 @@ false
false
false
-# Ignore https://issues.apache.org/jira/browse/IGNITE-19401
-skipif ignite3
query T
SELECT i=ALL(SELECT i FROM integers WHERE i<>i1.i) FROM integers i1 ORDER BY i;
----
@@ -157,7 +146,17 @@ true
true
NULL
-# Ignore https://issues.apache.org/jira/browse/IGNITE-19401
+#Ignore https://issues.apache.org/jira/browse/IGNITE-22314
+skipif ignite3
+query T
+SELECT i=ALL(SELECT i FROM (values(null), (1)) integers(i) WHERE i=i1.i OR i
IS NULL) FROM integers i1 ORDER BY i;
+----
+NULL
+NULL
+NULL
+NULL
+
+#Ignore https://issues.apache.org/jira/browse/IGNITE-22314
skipif ignite3
query T
SELECT i=ALL(SELECT i FROM integers WHERE i=i1.i OR i IS NULL) FROM integers
i1 ORDER BY i;
diff --git
a/modules/sql-engine/src/integrationTest/sql/subquery/scalar/test_grouped_correlated_subquery.test
b/modules/sql-engine/src/integrationTest/sql/subquery/scalar/test_grouped_correlated_subquery.test
index e40c6d7bc3..f90d4ea658 100644
---
a/modules/sql-engine/src/integrationTest/sql/subquery/scalar/test_grouped_correlated_subquery.test
+++
b/modules/sql-engine/src/integrationTest/sql/subquery/scalar/test_grouped_correlated_subquery.test
@@ -33,6 +33,123 @@ false
false
false
+skipif ignite3
+# https://issues.apache.org/jira/browse/IGNITE-16000
+query T
+SELECT col1 IN (SELECT ColID + col1 FROM tbl_ProductSales) FROM another_T
GROUP BY col1;
+----
+false
+false
+false
+false
+
+skipif ignite3
+# https://issues.apache.org/jira/browse/IGNITE-16000
+query T
+SELECT col1 IN (SELECT ColID + another_T.col1 FROM tbl_ProductSales) FROM
another_T GROUP BY col1;
+----
+false
+false
+false
+false
+
+skipif ignite3
+# https://issues.apache.org/jira/browse/IGNITE-16000
+query IT
+SELECT (col1 + 1) AS k, k IN (SELECT ColID + k FROM tbl_ProductSales) FROM
another_T GROUP BY k ORDER BY 1;
+----
+2 false
+12 false
+112 false
+1112 false
+
+skipif ignite3
+# https://issues.apache.org/jira/browse/IGNITE-16000
+query T
+SELECT (col1 + 1) IN (SELECT ColID + (col1 + 1) FROM tbl_ProductSales) FROM
another_T GROUP BY (col1 + 1);
+----
+false
+false
+false
+false
+
# this should fail, col1 + 42 is not a grouping column
statement error
SELECT col1+1, col1+42 FROM another_T GROUP BY col1+1;
+
+# this should also fail, col1 + 42 is not a grouping column
+statement error
+SELECT (col1 + 1) IN (SELECT ColID + (col1 + 42) FROM tbl_ProductSales) FROM
another_T GROUP BY (col1 + 1);
+
+skipif ignite3
+# https://issues.apache.org/jira/browse/IGNITE-16000
+# having without GROUP BY in subquery
+query T
+SELECT col5 = ALL (SELECT 1 FROM tbl_ProductSales HAVING MIN(col8) IS NULL)
FROM another_T GROUP BY col1, col2, col5, col8;
+----
+1
+1
+1
+1
+
+query I
+SELECT CASE WHEN 1 IN (SELECT MAX(col7) UNION ALL (SELECT MIN(ColID) FROM
tbl_ProductSales INNER JOIN another_T t2 ON t2.col5 = t2.col1)) THEN 2 ELSE
NULL END FROM another_T t1;
+----
+NULL
+NULL
+NULL
+NULL
+
+skipif ignite3
+# https://issues.apache.org/jira/browse/IGNITE-16000
+query I
+SELECT CASE WHEN 1 IN (SELECT (SELECT MAX(col7))) THEN 2 ELSE NULL END FROM
another_T t1;
+----
+NULL
+
+skipif ignite3
+# https://issues.apache.org/jira/browse/IGNITE-16000
+# UNION ALL with correlated subquery on either side
+query I
+SELECT CASE WHEN 1 IN (SELECT (SELECT MAX(col7)) UNION ALL (SELECT MIN(ColID)
FROM tbl_ProductSales INNER JOIN another_T t2 ON t2.col5 = t2.col1)) THEN 2
ELSE NULL END FROM another_T t1;
+----
+NULL
+
+query I
+SELECT CASE WHEN 1 IN (SELECT (SELECT MIN(ColID) FROM tbl_ProductSales INNER
JOIN another_T t2 ON t2.col5 = t2.col1) UNION ALL (SELECT MAX(col7))) THEN 2
ELSE NULL END FROM another_T t1;
+----
+NULL
+NULL
+NULL
+NULL
+
+# correlated column comparison with correlated subquery
+query I
+SELECT (SELECT MIN(ColID) FROM tbl_ProductSales INNER JOIN another_T t2 ON
t1.col7 <> (SELECT MAX(t1.col1 + t3.col4) FROM another_T t3)) FROM another_T t1;
+----
+1
+1
+1
+1
+
+query I
+SELECT (SELECT MIN(ColID) FROM tbl_ProductSales INNER JOIN another_T t2 ON
t1.col7 <> ANY(SELECT MAX(t1.col1 + t3.col4) FROM another_T t3)) FROM another_T
t1;
+----
+1
+1
+1
+1
+
+# LEFT JOIN between correlated columns not supported for now
+statement error
+SELECT CASE WHEN NOT col1 NOT IN (SELECT (SELECT MAX(col7)) UNION (SELECT
MIN(ColID) FROM tbl_ProductSales LEFT JOIN another_T t2 ON t2.col5 = t1.col1))
THEN 1 ELSE 2 END FROM another_T t1 GROUP BY col1 ORDER BY 1;
+
+# REQUIRE(CHECK_COLUMN(result, 0, {1, 2, 2, 2}));
+# correlated columns in window functions not supported yet
+statement error
+SELECT EXISTS (SELECT RANK() OVER (PARTITION BY SUM(DISTINCT col5))) FROM
another_T t1;
+
+# REQUIRE(CHECK_COLUMN(result, 0, {true}));
+statement error
+SELECT (SELECT SUM(col2) OVER (PARTITION BY SUM(col2) ORDER BY MAX(col1 +
ColID) ROWS UNBOUNDED PRECEDING) FROM tbl_ProductSales) FROM another_T t1 GROUP
BY col1
+
diff --git
a/modules/sql-engine/src/integrationTest/sql/subquery/scalar/test_grouped_correlated_subquery.test_ignore
b/modules/sql-engine/src/integrationTest/sql/subquery/scalar/test_grouped_correlated_subquery.test_ignore
deleted file mode 100644
index 90cbab3f3f..0000000000
---
a/modules/sql-engine/src/integrationTest/sql/subquery/scalar/test_grouped_correlated_subquery.test_ignore
+++ /dev/null
@@ -1,137 +0,0 @@
-# name: test/sql/subquery/scalar/test_grouped_correlated_subquery.test
-# description: Test correlated subquery with grouping columns
-# group: [scalar]
-# Ignore https://issues.apache.org/jira/browse/IGNITE-15607
-# Ignore https://issues.apache.org/jira/browse/IGNITE-16000
-
-statement ok
-PRAGMA enable_verification
-
-statement ok
-CREATE TABLE tbl_ProductSales (ColID int, Product_Category varchar(64),
Product_Name varchar(64), TotalSales int);
-
-statement ok
-CREATE TABLE another_T (col1 INT, col2 INT, col3 INT, col4 INT, col5 INT, col6
INT, col7 INT, col8 INT);
-
-statement ok
-INSERT INTO tbl_ProductSales VALUES (1,'Game','Mobo Game',200),(2,'Game','PKO
Game',400),(3,'Fashion','Shirt',500),(4,'Fashion','Shorts',100);
-
-statement ok
-INSERT INTO another_T VALUES (1,2,3,4,5,6,7,8), (11,22,33,44,55,66,77,88),
(111,222,333,444,555,666,777,888), (1111,2222,3333,4444,5555,6666,7777,8888);
-
-query T rowsort
-SELECT col1 IN (SELECT ColID FROM tbl_ProductSales) FROM another_T
-----
-true
-false
-false
-false
-
-query T
-SELECT col1 IN (SELECT ColID + col1 FROM tbl_ProductSales) FROM another_T;
-----
-false
-false
-false
-false
-
-query T
-SELECT col1 IN (SELECT ColID + col1 FROM tbl_ProductSales) FROM another_T
GROUP BY col1;
-----
-false
-false
-false
-false
-
-query T
-SELECT col1 IN (SELECT ColID + another_T.col1 FROM tbl_ProductSales) FROM
another_T GROUP BY col1;
-----
-false
-false
-false
-false
-
-query IT
-SELECT (col1 + 1) AS k, k IN (SELECT ColID + k FROM tbl_ProductSales) FROM
another_T GROUP BY k ORDER BY 1;
-----
-2 false
-12 false
-112 false
-1112 false
-
-query T
-SELECT (col1 + 1) IN (SELECT ColID + (col1 + 1) FROM tbl_ProductSales) FROM
another_T GROUP BY (col1 + 1);
-----
-false
-false
-false
-false
-
-# this should fail, col1 + 42 is not a grouping column
-statement error
-SELECT col1+1, col1+42 FROM another_T GROUP BY col1+1;
-
-# this should also fail, col1 + 42 is not a grouping column
-statement error
-SELECT (col1 + 1) IN (SELECT ColID + (col1 + 42) FROM tbl_ProductSales) FROM
another_T GROUP BY (col1 + 1);
-
-# having without GROUP BY in subquery
-query T
-SELECT col5 = ALL (SELECT 1 FROM tbl_ProductSales HAVING MIN(col8) IS NULL)
FROM another_T GROUP BY col1, col2, col5, col8;
-----
-1
-1
-1
-1
-
-query I
-SELECT CASE WHEN 1 IN (SELECT MAX(col7) UNION ALL (SELECT MIN(ColID) FROM
tbl_ProductSales INNER JOIN another_T t2 ON t2.col5 = t2.col1)) THEN 2 ELSE
NULL END FROM another_T t1;
-----
-NULL
-
-query I
-SELECT CASE WHEN 1 IN (SELECT (SELECT MAX(col7))) THEN 2 ELSE NULL END FROM
another_T t1;
-----
-NULL
-
-# UNION ALL with correlated subquery on either side
-query I
-SELECT CASE WHEN 1 IN (SELECT (SELECT MAX(col7)) UNION ALL (SELECT MIN(ColID)
FROM tbl_ProductSales INNER JOIN another_T t2 ON t2.col5 = t2.col1)) THEN 2
ELSE NULL END FROM another_T t1;
-----
-NULL
-
-query I
-SELECT CASE WHEN 1 IN (SELECT (SELECT MIN(ColID) FROM tbl_ProductSales INNER
JOIN another_T t2 ON t2.col5 = t2.col1) UNION ALL (SELECT MAX(col7))) THEN 2
ELSE NULL END FROM another_T t1;
-----
-NULL
-
-# correlated column comparison with correlated subquery
-query I
-SELECT (SELECT MIN(ColID) FROM tbl_ProductSales INNER JOIN another_T t2 ON
t1.col7 <> (SELECT MAX(t1.col1 + t3.col4) FROM another_T t3)) FROM another_T t1;
-----
-1
-1
-1
-1
-
-query I
-SELECT (SELECT MIN(ColID) FROM tbl_ProductSales INNER JOIN another_T t2 ON
t1.col7 <> ANY(SELECT MAX(t1.col1 + t3.col4) FROM another_T t3)) FROM another_T
t1;
-----
-1
-1
-1
-1
-
-# LEFT JOIN between correlated columns not supported for now
-statement error
-SELECT CASE WHEN NOT col1 NOT IN (SELECT (SELECT MAX(col7)) UNION (SELECT
MIN(ColID) FROM tbl_ProductSales LEFT JOIN another_T t2 ON t2.col5 = t1.col1))
THEN 1 ELSE 2 END FROM another_T t1 GROUP BY col1 ORDER BY 1;
-
-# REQUIRE(CHECK_COLUMN(result, 0, {1, 2, 2, 2}));
-# correlated columns in window functions not supported yet
-statement error
-SELECT EXISTS (SELECT RANK() OVER (PARTITION BY SUM(DISTINCT col5))) FROM
another_T t1;
-
-# REQUIRE(CHECK_COLUMN(result, 0, {true}));
-statement error
-SELECT (SELECT SUM(col2) OVER (PARTITION BY SUM(col2) ORDER BY MAX(col1 +
ColID) ROWS UNBOUNDED PRECEDING) FROM tbl_ProductSales) FROM another_T t1 GROUP
BY col1
-
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
index 9b55baa9ca..5145455e42 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
@@ -263,6 +263,8 @@ public class AccumulatorsFactory<RowT> implements
Supplier<List<AccumulatorWrapp
private final RowHandler<RowT> handler;
+ private final boolean distinct;
+
AccumulatorWrapperImpl(
Accumulator accumulator,
AggregateCall call,
@@ -272,7 +274,9 @@ public class AccumulatorsFactory<RowT> implements
Supplier<List<AccumulatorWrapp
this.accumulator = accumulator;
this.inAdapter = inAdapter;
this.outAdapter = outAdapter;
+ distinct = call.isDistinct();
+ // need to be refactored after
https://issues.apache.org/jira/browse/IGNITE-22320
literalAgg = call.getAggregation() == LITERAL_AGG;
argList = call.getArgList();
ignoreNulls = call.ignoreNulls();
@@ -288,12 +292,20 @@ public class AccumulatorsFactory<RowT> implements
Supplier<List<AccumulatorWrapp
return;
}
- // need to be refactored after
https://issues.apache.org/jira/browse/CALCITE-5969
- int params = literalAgg ? 1 : argList.size();
+ int params = argList.size();
+
+ List<Integer> argList0 = argList;
+
+ if ((distinct && argList.isEmpty()) || literalAgg) {
+ int cnt = handler.columnCount(row);
+ assert cnt <= 1;
+ argList0 = List.of(0);
+ params = 1;
+ }
Object[] args = new Object[params];
for (int i = 0; i < params; i++) {
- int argPos = literalAgg ? 0 : argList.get(i);
+ int argPos = argList0.get(i);
args[i] = handler.get(argPos, row);
if (ignoreNulls && args[i] == null) {
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/BaseAggregateTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/BaseAggregateTest.java
index 111eb5968c..8455bd6ecf 100644
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/BaseAggregateTest.java
+++
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/BaseAggregateTest.java
@@ -112,6 +112,59 @@ public abstract class BaseAggregateTest extends
AbstractExecutionTest<Object[]>
assertFalse(root.hasNext());
}
+ @ParameterizedTest
+ @EnumSource
+ public void countDistinct(TestAggregateType testAgg) {
+ ExecutionContext<Object[]> ctx = executionContext(false);
+ IgniteTypeFactory tf = ctx.getTypeFactory();
+ RelDataType rowType = TypeUtils.createRowType(tf,
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
+ ScanNode<Object[]> scan = new ScanNode<>(ctx, Arrays.asList(
+ row(0),
+ row(1),
+ row(1),
+ row(0),
+ row(2)
+ ));
+
+ AggregateCall call = AggregateCall.create(
+ SqlStdOperatorTable.COUNT,
+ true,
+ false,
+ false,
+ ImmutableList.of(),
+ ImmutableIntList.of(),
+ -1,
+ null,
+ RelCollations.EMPTY,
+ tf.createJavaType(int.class),
+ null);
+
+ List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
+
+ RelDataType aggRowType = TypeUtils.createRowType(tf,
TypeUtils.native2relationalTypes(tf, NativeTypes.INT32));
+
+ SingleNode<Object[]> aggChain = createAggregateNodesChain(
+ testAgg,
+ ctx,
+ grpSets,
+ call,
+ rowType,
+ aggRowType,
+ rowFactory(),
+ scan,
+ false
+ );
+
+ RootNode<Object[]> root = new RootNode<>(ctx);
+ root.register(aggChain);
+
+ assertTrue(root.hasNext());
+
+ assertArrayEquals(row(3), root.next());
+
+ assertFalse(root.hasNext());
+ }
+
@ParameterizedTest
@EnumSource
public void min(TestAggregateType testAgg) {
@@ -674,13 +727,27 @@ public abstract class BaseAggregateTest extends
AbstractExecutionTest<Object[]>
RelDataType aggRowType,
RowHandler.RowFactory<Object[]> rowFactory,
ScanNode<Object[]> scan
+ ) {
+ return createAggregateNodesChain(testAgg, ctx, grpSets, aggCall,
inRowType, aggRowType, rowFactory, scan, true);
+ }
+
+ protected SingleNode<Object[]> createAggregateNodesChain(
+ TestAggregateType testAgg,
+ ExecutionContext<Object[]> ctx,
+ List<ImmutableBitSet> grpSets,
+ AggregateCall aggCall,
+ RelDataType inRowType,
+ RelDataType aggRowType,
+ RowHandler.RowFactory<Object[]> rowFactory,
+ ScanNode<Object[]> scan,
+ boolean group
) {
switch (testAgg) {
case COLOCATED:
- return createColocatedAggregateNodesChain(ctx, grpSets,
aggCall, inRowType, rowFactory, scan);
+ return createColocatedAggregateNodesChain(ctx, grpSets,
aggCall, inRowType, rowFactory, scan, group);
case MAP_REDUCE:
- return createMapReduceAggregateNodesChain(ctx, grpSets,
aggCall, inRowType, aggRowType, rowFactory, scan);
+ return createMapReduceAggregateNodesChain(ctx, grpSets,
aggCall, inRowType, aggRowType, rowFactory, scan, group);
default:
assert false;
@@ -689,15 +756,40 @@ public abstract class BaseAggregateTest extends
AbstractExecutionTest<Object[]>
}
}
+ /**
+ * Create colocation implemented aggregate node.
+ *
+ * @param ctx Execution context.
+ * @param grpSets Grouping fields
+ * @param aggCall Aggregate representation.
+ * @param inRowType Input row type.
+ * @param rowFactory Row factory.
+ * @param scan Scan node.
+ * @param group Append grouping operation.
+ * @return Aggregation nodes chain.
+ */
protected abstract SingleNode<Object[]> createColocatedAggregateNodesChain(
ExecutionContext<Object[]> ctx,
List<ImmutableBitSet> grpSets,
AggregateCall aggCall,
RelDataType inRowType,
RowHandler.RowFactory<Object[]> rowFactory,
- ScanNode<Object[]> scan
+ ScanNode<Object[]> scan,
+ boolean group
);
+ /**
+ * Create map reduce implemented aggregate node.
+ *
+ * @param ctx Execution context.
+ * @param grpSets Grouping fields
+ * @param call Aggregate representation.
+ * @param inRowType Input row type.
+ * @param rowFactory Row factory.
+ * @param scan Scan node.
+ * @param group Append grouping operation.
+ * @return Aggregation nodes chain.
+ */
protected abstract SingleNode<Object[]> createMapReduceAggregateNodesChain(
ExecutionContext<Object[]> ctx,
List<ImmutableBitSet> grpSets,
@@ -705,7 +797,8 @@ public abstract class BaseAggregateTest extends
AbstractExecutionTest<Object[]>
RelDataType inRowType,
RelDataType aggRowType,
RowHandler.RowFactory<Object[]> rowFactory,
- ScanNode<Object[]> scan
+ ScanNode<Object[]> scan,
+ boolean group
);
protected Supplier<List<AccumulatorWrapper<Object[]>>> accFactory(
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateExecutionTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateExecutionTest.java
index bb4355ca79..47f1135e51 100644
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateExecutionTest.java
+++
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/HashAggregateExecutionTest.java
@@ -52,7 +52,8 @@ public class HashAggregateExecutionTest extends
BaseAggregateTest {
AggregateCall call,
RelDataType inRowType,
RowHandler.RowFactory<Object[]> rowFactory,
- ScanNode<Object[]> scan
+ ScanNode<Object[]> scan,
+ boolean group
) {
assert grpSets.size() == 1 : "Test checks only simple GROUP BY";
@@ -66,16 +67,22 @@ public class HashAggregateExecutionTest extends
BaseAggregateTest {
agg.register(scan);
- RelCollation collation = createOutCollation(grpSets);
+ if (group) {
+ RelCollation collation = createOutCollation(grpSets);
- Comparator<Object[]> cmp =
ctx.expressionFactory().comparator(collation);
+ Comparator<Object[]> cmp =
ctx.expressionFactory().comparator(collation);
- // Create sort node on the top to check sorted results
- SortNode<Object[]> sort = new SortNode<>(ctx, cmp);
+ // Create sort node on the top to check sorted results
+ SortNode<Object[]> sort = new SortNode<>(ctx, cmp);
- sort.register(agg);
+ sort.register(agg);
+
+ return sort;
+ } else {
+ agg.register(scan);
- return sort;
+ return agg;
+ }
}
private RelCollation createOutCollation(List<ImmutableBitSet> grpSets) {
@@ -102,7 +109,8 @@ public class HashAggregateExecutionTest extends
BaseAggregateTest {
RelDataType inRowType,
RelDataType aggRowType,
RowHandler.RowFactory<Object[]> rowFactory,
- ScanNode<Object[]> scan
+ ScanNode<Object[]> scan,
+ boolean group
) {
assert grpSets.size() == 1 : "Test checks only simple GROUP BY";
@@ -140,11 +148,15 @@ public class HashAggregateExecutionTest extends
BaseAggregateTest {
Comparator<Object[]> cmp =
ctx.expressionFactory().comparator(collation);
- // Create sort node on the top to check sorted results
- SortNode<Object[]> sort = new SortNode<>(ctx, cmp);
+ if (group) {
+ // Create sort node on the top to check sorted results
+ SortNode<Object[]> sort = new SortNode<>(ctx, cmp);
- sort.register(aggRdc);
+ sort.register(aggRdc);
- return sort;
+ return sort;
+ } else {
+ return aggRdc;
+ }
}
}
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortAggregateExecutionTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortAggregateExecutionTest.java
index 765ac75912..ab77c61534 100644
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortAggregateExecutionTest.java
+++
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/rel/SortAggregateExecutionTest.java
@@ -52,7 +52,8 @@ public class SortAggregateExecutionTest extends
BaseAggregateTest {
AggregateCall call,
RelDataType inRowType,
RowHandler.RowFactory<Object[]> rowFactory,
- ScanNode<Object[]> scan
+ ScanNode<Object[]> scan,
+ boolean group
) {
assert grpSets.size() == 1;
@@ -62,10 +63,6 @@ public class SortAggregateExecutionTest extends
BaseAggregateTest {
Comparator<Object[]> cmp =
ctx.expressionFactory().comparator(collation);
- SortNode<Object[]> sort = new SortNode<>(ctx, cmp);
-
- sort.register(scan);
-
if (grpSet.isEmpty() && cmp == null) {
cmp = (k1, k2) -> 0;
}
@@ -79,7 +76,15 @@ public class SortAggregateExecutionTest extends
BaseAggregateTest {
cmp
);
- agg.register(sort);
+ if (group) {
+ SortNode<Object[]> sort = new SortNode<>(ctx, cmp);
+
+ sort.register(scan);
+
+ agg.register(sort);
+ } else {
+ agg.register(scan);
+ }
return agg;
}
@@ -93,7 +98,8 @@ public class SortAggregateExecutionTest extends
BaseAggregateTest {
RelDataType inRowType,
RelDataType aggRowType,
RowHandler.RowFactory<Object[]> rowFactory,
- ScanNode<Object[]> scan
+ ScanNode<Object[]> scan,
+ boolean group
) {
assert grpSets.size() == 1;
@@ -103,10 +109,6 @@ public class SortAggregateExecutionTest extends
BaseAggregateTest {
Comparator<Object[]> cmp =
ctx.expressionFactory().comparator(collation);
- SortNode<Object[]> sort = new SortNode<>(ctx, cmp);
-
- sort.register(scan);
-
if (grpSet.isEmpty() && cmp == null) {
cmp = (k1, k2) -> 0;
}
@@ -120,7 +122,15 @@ public class SortAggregateExecutionTest extends
BaseAggregateTest {
cmp
);
- aggMap.register(sort);
+ if (group) {
+ SortNode<Object[]> sort = new SortNode<>(ctx, cmp);
+
+ sort.register(scan);
+
+ aggMap.register(sort);
+ } else {
+ aggMap.register(scan);
+ }
// The group's fields placed on the begin of the output row (planner
// does this by Projection node for aggregate input).