You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/12/05 12:38:31 UTC

[27/52] ignite git commit: IGNITE-4279: Fixed JdbcResultSetSelfTest. This closes #1284.

IGNITE-4279: Fixed JdbcResultSetSelfTest. This closes #1284.


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

Branch: refs/heads/master
Commit: 7b8d530858b997aeedc2f0281bbb707d9d8b86ef
Parents: 5b2eacf
Author: Alexander Paschenko <al...@gmail.com>
Authored: Fri Nov 25 14:22:17 2016 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Fri Nov 25 14:22:17 2016 +0300

----------------------------------------------------------------------
 .../internal/jdbc2/JdbcResultSetSelfTest.java   | 18 ++++++++
 .../ignite/internal/jdbc2/JdbcResultSet.java    | 47 +++++++++++++++++---
 .../ignite/internal/jdbc2/JdbcStatement.java    |  4 +-
 3 files changed, 62 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7b8d5308/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
index 131ed74..1b5223e 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcResultSetSelfTest.java
@@ -596,6 +596,24 @@ public class JdbcResultSetSelfTest extends GridCommonAbstractTest {
         stmt.setFetchSize(0);
     }
 
+    /**
+     * @throws Exception If failed.
+     */
+    public void testNewQueryTaskFetchSize() throws Exception {
+        stmt.setFetchSize(1);
+
+        boolean res = stmt.execute("select * from TestObject where id > 0");
+
+        assertTrue(res);
+
+        ResultSet rs = stmt.getResultSet();
+
+        assertTrue(rs.next());
+        assertTrue(rs.next());
+        assertTrue(rs.next());
+
+        stmt.setFetchSize(0);
+    }
 
     /**
      * @throws Exception If failed.

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b8d5308/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
index c1a5f4c..b53521e 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
@@ -88,10 +88,11 @@ public class JdbcResultSet implements ResultSet {
     /** Fetch size. */
     private int fetchSize;
 
+    /** Which query task to use under the hood - {@link JdbcQueryTaskV2} if {@code true}, {@link JdbcQueryTask} otherwise. */
+    private final boolean useNewQryTask;
+
     /**
-     * Creates new result set with predefined fields.
-     * Result set created with this constructor will
-     * never execute remote tasks.
+     * Creates new result set.
      *
      * @param uuid Query UUID.
      * @param stmt Statement.
@@ -102,6 +103,39 @@ public class JdbcResultSet implements ResultSet {
      */
     JdbcResultSet(@Nullable UUID uuid, JdbcStatement stmt, List<String> tbls, List<String> cols,
         List<String> types, Collection<List<?>> fields, boolean finished) {
+        this(uuid, stmt, tbls, cols, types, fields, finished, false);
+    }
+
+    /**
+     * Creates new result set that will be based on {@link JdbcQueryTaskV2}. This method is intended for use inside
+     *     {@link JdbcStatement} only.
+     *
+     * @param uuid Query UUID.
+     * @param stmt Statement.
+     * @param tbls Table names.
+     * @param cols Column names.
+     * @param types Types.
+     * @param fields Fields.
+     */
+    static JdbcResultSet resultSetForQueryTaskV2(@Nullable UUID uuid, JdbcStatement stmt, List<String> tbls,
+            List<String> cols, List<String> types, Collection<List<?>> fields, boolean finished) {
+        return new JdbcResultSet(uuid, stmt, tbls, cols, types, fields, finished, true);
+    }
+
+    /**
+     * Creates new result set.
+     *
+     * @param uuid Query UUID.
+     * @param stmt Statement.
+     * @param tbls Table names.
+     * @param cols Column names.
+     * @param types Types.
+     * @param fields Fields.
+     * @param useNewQryTask Which query task to use under the hood - {@link JdbcQueryTaskV2} if {@code true},
+     *     {@link JdbcQueryTask} otherwise.
+     */
+    private JdbcResultSet(@Nullable UUID uuid, JdbcStatement stmt, List<String> tbls, List<String> cols,
+        List<String> types, Collection<List<?>> fields, boolean finished, boolean useNewQryTask) {
         assert stmt != null;
         assert tbls != null;
         assert cols != null;
@@ -116,6 +150,8 @@ public class JdbcResultSet implements ResultSet {
         this.finished = finished;
 
         this.it = fields.iterator();
+
+        this.useNewQryTask = useNewQryTask;
     }
 
     /** {@inheritDoc} */
@@ -147,7 +183,7 @@ public class JdbcResultSet implements ResultSet {
 
             boolean loc = nodeId == null;
 
-            if (conn.isDmlSupported()) {
+            if (useNewQryTask) {
                 // Connections from new clients send queries with new tasks, so we have to continue in the same manner
                 JdbcQueryTaskV2 qryTask = new JdbcQueryTaskV2(loc ? ignite : null, conn.cacheName(), null, true, loc, null,
                     fetchSize, uuid, conn.isLocalQuery(), conn.isCollocatedQuery(), conn.isDistributedJoins());
@@ -209,8 +245,9 @@ public class JdbcResultSet implements ResultSet {
      * If this result set is associated with locally executed query then query cursor will also closed.
      */
     void closeInternal() throws SQLException  {
-        if (((JdbcConnection)stmt.getConnection()).nodeId() == null && uuid != null)
+        if (((JdbcConnection)stmt.getConnection()).nodeId() == null && uuid != null) {
             JdbcQueryTask.remove(uuid);
+        }
 
         closed = true;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b8d5308/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
index dbb2390..5621058 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
@@ -346,8 +346,8 @@ public class JdbcStatement implements Statement {
                 loc ? qryTask.call() : ignite.compute(ignite.cluster().forNodeId(nodeId)).call(qryTask);
 
             if (res.isQuery()) {
-                JdbcResultSet rs = new JdbcResultSet(uuid, this, res.getTbls(), res.getCols(), res.getTypes(),
-                    res.getRows(), res.isFinished());
+                JdbcResultSet rs = JdbcResultSet.resultSetForQueryTaskV2(uuid, this, res.getTbls(), res.getCols(),
+                    res.getTypes(), res.getRows(), res.isFinished());
 
                 rs.setFetchSize(fetchSize);