You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2021/12/29 06:30:45 UTC

[ignite] branch sql-calcite updated: IGNITE-16228 Fix SetOp execution node rewindability - Fixes #9706.

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

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


The following commit(s) were added to refs/heads/sql-calcite by this push:
     new 1706f02  IGNITE-16228 Fix SetOp execution node rewindability - Fixes #9706.
1706f02 is described below

commit 1706f0281f530c4bc5f6de8bb594fd17d44c83cf
Author: Aleksey Plekhanov <pl...@gmail.com>
AuthorDate: Wed Dec 29 11:22:31 2021 +0500

    IGNITE-16228 Fix SetOp execution node rewindability - Fixes #9706.
    
    Signed-off-by: Aleksey Plekhanov <pl...@gmail.com>
---
 .../query/calcite/exec/rel/AbstractSetOpNode.java          |  1 +
 .../query/calcite/integration/SetOpIntegrationTest.java    | 14 ++++++++++++++
 .../subquery/scalar/test_complex_correlated_subquery.test  |  8 ++++++++
 .../scalar/test_complex_correlated_subquery.test_ignore    |  1 -
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractSetOpNode.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractSetOpNode.java
index 6e60a88..4f7bc59 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractSetOpNode.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractSetOpNode.java
@@ -121,6 +121,7 @@ public abstract class AbstractSetOpNode<Row> extends AbstractNode<Row> {
     @Override protected void rewindInternal() {
         requested = 0;
         waiting = 0;
+        curSrcIdx = 0;
         grouping.groups.clear();
     }
 
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SetOpIntegrationTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SetOpIntegrationTest.java
index 0a85fae..2676706 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SetOpIntegrationTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SetOpIntegrationTest.java
@@ -417,4 +417,18 @@ public class SetOpIntegrationTest extends AbstractBasicIntegrationTest {
         assertEquals(2, rows.size());
         assertEquals(2, F.size(rows, r -> r.get(0).equals("Igor1")));
     }
+
+    /**
+     * Test that set op node can be rewinded.
+     */
+    @Test
+    public void testSetOpRewindability() {
+        executeSql("CREATE TABLE test(i INTEGER)");
+        executeSql("INSERT INTO test VALUES (1), (2)");
+
+        assertQuery("SELECT (SELECT i FROM test EXCEPT SELECT test.i) FROM test")
+            .returns(1)
+            .returns(2)
+            .check();
+    }
 }
diff --git a/modules/calcite/src/test/sql/subquery/scalar/test_complex_correlated_subquery.test b/modules/calcite/src/test/sql/subquery/scalar/test_complex_correlated_subquery.test
index 786a52c..0536be5 100644
--- a/modules/calcite/src/test/sql/subquery/scalar/test_complex_correlated_subquery.test
+++ b/modules/calcite/src/test/sql/subquery/scalar/test_complex_correlated_subquery.test
@@ -63,6 +63,14 @@ SELECT i, (SELECT SUM(s1.i) FROM integers s1 FULL OUTER JOIN integers s2 ON s1.i
 statement error
 SELECT i, (SELECT row_number() OVER (ORDER BY i)) FROM integers i1 ORDER BY i;
 
+# except with correlated expression
+query II
+SELECT i, (SELECT i FROM integers WHERE i IS NOT NULL EXCEPT SELECT i FROM integers WHERE i<>i1.i) AS j FROM integers i1 WHERE i IS NOT NULL ORDER BY i;
+----
+1	1
+2	2
+3	3
+
 # uncorrelated query inside correlated query
 query IR
 SELECT i, (SELECT (SELECT SUM(i) FROM integers)+42+i1.i) AS j FROM integers i1 ORDER BY i;
diff --git a/modules/calcite/src/test/sql/subquery/scalar/test_complex_correlated_subquery.test_ignore b/modules/calcite/src/test/sql/subquery/scalar/test_complex_correlated_subquery.test_ignore
index c98bb24..5a2e4c3 100644
--- a/modules/calcite/src/test/sql/subquery/scalar/test_complex_correlated_subquery.test_ignore
+++ b/modules/calcite/src/test/sql/subquery/scalar/test_complex_correlated_subquery.test_ignore
@@ -5,7 +5,6 @@
 # Ignore https://issues.apache.org/jira/browse/IGNITE-15594
 # Ignore https://issues.apache.org/jira/browse/IGNITE-15593
 # Ignore https://issues.apache.org/jira/browse/IGNITE-15588
-# Ignore https://issues.apache.org/jira/browse/IGNITE-15592
 # Ignore https://issues.apache.org/jira/browse/IGNITE-16000
 
 statement ok