From 41c1c5fdd1d9360c777835b04de5117029067f53 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 17 Jan 2018 22:14:07 +0200 Subject: [PATCH] SQL: close ResultSet after asserting (elastic/x-pack-elasticsearch#3601) The on-closing Connection is closed so there's no leak however closing the ResultSet is good practice and tests another piece of code as well Original commit: elastic/x-pack-elasticsearch@3a9cee70a3d39ab04ef95cffe31b82866556b150 --- .../xpack/qa/sql/jdbc/JdbcAssert.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/qa/sql/src/main/java/org/elasticsearch/xpack/qa/sql/jdbc/JdbcAssert.java b/qa/sql/src/main/java/org/elasticsearch/xpack/qa/sql/jdbc/JdbcAssert.java index 8b39074ad0f..c4c8a6bbfee 100644 --- a/qa/sql/src/main/java/org/elasticsearch/xpack/qa/sql/jdbc/JdbcAssert.java +++ b/qa/sql/src/main/java/org/elasticsearch/xpack/qa/sql/jdbc/JdbcAssert.java @@ -32,14 +32,13 @@ public class JdbcAssert { } public static void assertResultSets(ResultSet expected, ResultSet actual, Logger logger) throws SQLException { - assertResultSetMetadata(expected, actual, logger); - assertResultSetData(expected, actual, logger); - } - - public static void assertResultSetMetadata(ResultSet expected, ResultSet actual) throws SQLException { - assertResultSetMetadata(expected, actual, null); + try (ResultSet ex = expected; ResultSet ac = actual) { + assertResultSetMetadata(ex, ac, logger); + assertResultSetData(ex, ac, logger); + } } + // metadata doesn't consume a ResultSet thus it shouldn't close it public static void assertResultSetMetadata(ResultSet expected, ResultSet actual, Logger logger) throws SQLException { ResultSetMetaData expectedMeta = expected.getMetaData(); ResultSetMetaData actualMeta = actual.getMetaData(); @@ -98,7 +97,14 @@ public class JdbcAssert { } } + // The ResultSet is consumed and thus it should be closed public static void assertResultSetData(ResultSet expected, ResultSet actual, Logger logger) throws SQLException { + try (ResultSet ex = expected; ResultSet ac = actual) { + doAssertResultSetData(ex, ac, logger); + } + } + + private static void doAssertResultSetData(ResultSet expected, ResultSet actual, Logger logger) throws SQLException { ResultSetMetaData metaData = expected.getMetaData(); int columns = metaData.getColumnCount(); @@ -158,4 +164,4 @@ public class JdbcAssert { private static Object getTime(ResultSet rs, int column) throws SQLException { return rs.getTime(column, UTC_CALENDAR).getTime(); } -} +} \ No newline at end of file