IGNITE-9342: SQL: fixed execution of multu-statement non-colocated queries. 
This closes #4709.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/92af5389
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/92af5389
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/92af5389

Branch: refs/heads/ignite-627
Commit: 92af53895a0f617858b7149e6ccc4396e2e04675
Parents: ac093b9
Author: tledkov-gridgain <tled...@gridgain.com>
Authored: Mon Oct 29 16:49:46 2018 +0300
Committer: devozerov <voze...@gridgain.com>
Committed: Mon Oct 29 16:49:46 2018 +0300

----------------------------------------------------------------------
 .../processors/query/h2/IgniteH2Indexing.java   |  3 +-
 .../MultipleStatementsSqlQuerySelfTest.java     | 40 ++++++++++++++++----
 2 files changed, 34 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/92af5389/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index 866ae99..5bd6f7b 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -2192,8 +2192,9 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
                 res.addAll(doRunPrepared(schemaName, prepared, newQry, 
twoStepQry, meta, keepBinary, startTx, tracker,
                     cancel));
 
+                // We cannot cache two-step query for multiple statements 
query except the last statement
                 if (parseRes.twoStepQuery() != null && 
parseRes.twoStepQueryKey() != null &&
-                    !parseRes.twoStepQuery().explain())
+                    !parseRes.twoStepQuery().explain() && remainingSql == null)
                     twoStepCache.putIfAbsent(parseRes.twoStepQueryKey(), new 
H2TwoStepCachedQuery(meta,
                         twoStepQry.copy()));
             }

http://git-wip-us.apache.org/repos/asf/ignite/blob/92af5389/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/MultipleStatementsSqlQuerySelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/MultipleStatementsSqlQuerySelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/MultipleStatementsSqlQuerySelfTest.java
index becd586..65b9795 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/MultipleStatementsSqlQuerySelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/MultipleStatementsSqlQuerySelfTest.java
@@ -47,10 +47,8 @@ public class MultipleStatementsSqlQuerySelfTest extends 
GridCommonAbstractTest {
 
     /**
      * Test query without caches.
-     *
-     * @throws Exception If failed.
      */
-    public void testQuery() throws Exception {
+    public void testQuery() {
         GridQueryProcessor qryProc = node.context().query();
 
         SqlFieldsQuery qry = new SqlFieldsQuery(
@@ -92,10 +90,8 @@ public class MultipleStatementsSqlQuerySelfTest extends 
GridCommonAbstractTest {
 
     /**
      * Test query without caches.
-     *
-     * @throws Exception If failed.
      */
-    public void testQueryWithParameters() throws Exception {
+    public void testQueryWithParameters() {
         GridQueryProcessor qryProc = node.context().query();
 
         SqlFieldsQuery qry = new SqlFieldsQuery(
@@ -137,9 +133,8 @@ public class MultipleStatementsSqlQuerySelfTest extends 
GridCommonAbstractTest {
     }
 
     /**
-     * @throws Exception If failed.
      */
-    public void testQueryMultipleStatementsFailed() throws Exception {
+    public void testQueryMultipleStatementsFailed() {
         final SqlFieldsQuery qry = new SqlFieldsQuery("select 1; select 
1;").setSchema("PUBLIC");
 
         GridTestUtils.assertThrows(log,
@@ -151,4 +146,33 @@ public class MultipleStatementsSqlQuerySelfTest extends 
GridCommonAbstractTest {
                 }
             }, IgniteSQLException.class, "Multiple statements queries are not 
supported");
     }
+
+    /**
+     * Check cached two-steps query.
+     */
+    public void testCachedTwoSteps() {
+        List<FieldsQueryCursor<List<?>>> curs = sql("SELECT 1; SELECT 2");
+
+        assertEquals(2, curs.size());
+        assertEquals(1, curs.get(0).getAll().get(0).get(0));
+        assertEquals(2, curs.get(1).getAll().get(0).get(0));
+
+        curs = sql("SELECT 1; SELECT 2");
+
+        assertEquals(2, curs.size());
+        assertEquals(1, curs.get(0).getAll().get(0).get(0));
+        assertEquals(2, curs.get(1).getAll().get(0).get(0));
+    }
+
+    /**
+     * @param sql SQL query.
+     * @return Results.
+     */
+    private List<FieldsQueryCursor<List<?>>> sql(String sql) {
+        GridQueryProcessor qryProc = node.context().query();
+
+        SqlFieldsQuery qry = new SqlFieldsQuery(sql).setSchema("PUBLIC");
+
+        return qryProc.querySqlFields(qry, true, false);
+    }
 }

Reply via email to