IGNITE-3389 metadata result set throws NPE when closed - fixed
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9ecccc7c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9ecccc7c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9ecccc7c
Branch: refs/heads/ignite-3560
Commit: 9ecccc7c559342fcc6b67457f7456d6af2c084d8
Parents: c075ab3
Author: Alexandre Boudnik <Alexandre_Boudnik@epam.com>
Authored: Fri Jul 22 18:40:47 2016 +0300
Committer: agura <agura@gridgain.com>
Committed: Mon Jul 25 12:39:35 2016 +0300
----------------------------------------------------------------------
.../internal/jdbc2/JdbcMetadataSelfTest.java | 63 ++++++++++++++------
.../ignite/jdbc/JdbcMetadataSelfTest.java | 18 ++++++
.../ignite/internal/jdbc2/JdbcResultSet.java | 2 +-
3 files changed, 64 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9ecccc7c/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
old mode 100644
new mode 100755
index f601dbc..7184b8d
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
@@ -17,24 +17,33 @@
package org.apache.ignite.internal.jdbc2;
-import org.apache.ignite.*;
-import org.apache.ignite.cache.affinity.*;
-import org.apache.ignite.cache.query.annotations.*;
-import org.apache.ignite.configuration.*;
-import org.apache.ignite.internal.util.typedef.*;
-import org.apache.ignite.spi.discovery.tcp.*;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
-import org.apache.ignite.testframework.junits.common.*;
-
-import java.io.*;
-import java.sql.*;
-import java.util.*;
-
-import static java.sql.Types.*;
-import static org.apache.ignite.IgniteJdbcDriver.*;
-import static org.apache.ignite.cache.CacheMode.*;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.*;
+import java.io.Serializable;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cache.affinity.AffinityKey;
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.ConnectorConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+import static java.sql.Types.INTEGER;
+import static java.sql.Types.OTHER;
+import static java.sql.Types.VARCHAR;
+import static org.apache.ignite.IgniteJdbcDriver.CFG_URL_PREFIX;
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* Metadata tests.
@@ -277,6 +286,24 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
}
/**
+ * @throws Exception If failed.
+ */
+ public void testMetadataResultSetClose() throws Exception {
+ try (Connection conn = DriverManager.getConnection(BASE_URL);
+ ResultSet tbls = conn.getMetaData().getTables(null, null, "%", null)) {
+ int colCnt = tbls.getMetaData().getColumnCount();
+
+ while (tbls.next()) {
+ for (int i = 0; i < colCnt; i++)
+ tbls.getObject(i + 1);
+ }
+ }
+ catch (Exception e) {
+ fail();
+ }
+ }
+
+ /**
* Person.
*/
@SuppressWarnings("UnusedDeclaration")
http://git-wip-us.apache.org/repos/asf/ignite/blob/9ecccc7c/modules/clients/src/test/java/org/apache/ignite/jdbc/JdbcMetadataSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/JdbcMetadataSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/jdbc/JdbcMetadataSelfTest.java
index 0deb45d..72d93c9 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/JdbcMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/JdbcMetadataSelfTest.java
@@ -289,6 +289,24 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
}
/**
+ * @throws Exception If failed.
+ */
+ public void testMetadataResultSetClose() throws Exception {
+ try (Connection conn = DriverManager.getConnection(URL);
+ ResultSet tbls = conn.getMetaData().getTables(null, null, "%", null)) {
+ int colCnt = tbls.getMetaData().getColumnCount();
+
+ while (tbls.next()) {
+ for (int i = 0; i < colCnt; i++)
+ tbls.getObject(i + 1);
+ }
+ }
+ catch (Exception e) {
+ fail();
+ }
+ }
+
+ /**
* Person.
*/
@SuppressWarnings("UnusedDeclaration")
http://git-wip-us.apache.org/repos/asf/ignite/blob/9ecccc7c/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
old mode 100644
new mode 100755
index 5092b42..69dddad
--- 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
@@ -182,7 +182,7 @@ 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)
+ if (((JdbcConnection)stmt.getConnection()).nodeId() == null && uuid != null)
JdbcQueryTask.remove(uuid);
closed = true;
|