Repository: ignite Updated Branches: refs/heads/master f245c3838 -> 37195a024
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/7fb03c7c Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7fb03c7c Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7fb03c7c Branch: refs/heads/master Commit: 7fb03c7ca0e4f64ff1629404f0b34d3d7a6e2bf1 Parents: 6c5218f Author: Alexandre Boudnik <alexandre_boud...@epam.com> Authored: Fri Jul 22 18:40:47 2016 +0300 Committer: agura <ag...@gridgain.com> Committed: Fri Jul 22 19:27:42 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/7fb03c7c/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/7fb03c7c/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/7fb03c7c/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;