This is an automated email from the ASF dual-hosted git repository. pboado pushed a commit to branch 5.x-cdh6 in repository https://gitbox.apache.org/repos/asf/phoenix.git
commit 5d37370c7c48558f924dce32a6f2c9c5dd52efe6 Author: s.kadam <s.ka...@salesforce.com> AuthorDate: Thu Apr 18 22:05:21 2019 +0100 PhoenixResultSet#next() closes the result set if scanner returns null --- .../org/apache/phoenix/end2end/QueryLoggerIT.java | 193 +++++++++++---------- .../org/apache/phoenix/jdbc/PhoenixResultSet.java | 4 +- 2 files changed, 102 insertions(+), 95 deletions(-) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryLoggerIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryLoggerIT.java index 208eddd..8a08d37 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryLoggerIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryLoggerIT.java @@ -103,44 +103,47 @@ public class QueryLoggerIT extends BaseUniqueNamesOwnClusterIT { Connection conn = DriverManager.getConnection(getUrl(),props); assertEquals(conn.unwrap(PhoenixConnection.class).getLogLevel(),LogLevel.DEBUG); String query = "SELECT * FROM " + tableName; - ResultSet rs = conn.createStatement().executeQuery(query); - StatementContext context = ((PhoenixResultSet)rs).getContext(); - String queryId = context.getQueryLogger().getQueryId(); - while (rs.next()) { - rs.getString(1); - rs.getString(2); + StatementContext context; + try (ResultSet rs = conn.createStatement().executeQuery(query)) { + context = ((PhoenixResultSet) rs).getContext(); + while (rs.next()) { + rs.getString(1); + rs.getString(2); + } } - ResultSet explainRS = conn.createStatement().executeQuery("Explain " + query); + String queryId = context.getQueryLogger().getQueryId(); String logQuery = "SELECT * FROM " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_LOG_TABLE + "\""; int delay = 5000; // sleep for sometime to let query log committed Thread.sleep(delay); - rs = conn.createStatement().executeQuery(logQuery); - boolean foundQueryLog = false; + try (ResultSet explainRS = conn.createStatement().executeQuery("Explain " + query); + ResultSet rs = conn.createStatement().executeQuery(logQuery)) { + boolean foundQueryLog = false; - while (rs.next()) { - if (rs.getString(QUERY_ID).equals(queryId)) { - foundQueryLog = true; - assertEquals(rs.getString(BIND_PARAMETERS), null); - assertEquals(rs.getString(USER), System.getProperty("user.name")); - assertEquals(rs.getString(CLIENT_IP), InetAddress.getLocalHost().getHostAddress()); - assertEquals(rs.getString(EXPLAIN_PLAN), QueryUtil.getExplainPlan(explainRS)); - assertEquals(rs.getString(GLOBAL_SCAN_DETAILS), context.getScan().toJSON()); - assertEquals(rs.getLong(NO_OF_RESULTS_ITERATED), 10); - assertEquals(rs.getString(QUERY), query); - assertEquals(rs.getString(QUERY_STATUS), QueryStatus.COMPLETED.toString()); - assertEquals(rs.getString(TENANT_ID), null); - assertTrue(rs.getString(SCAN_METRICS_JSON)==null); - assertEquals(rs.getString(EXCEPTION_TRACE),null); - }else{ - //confirm we are not logging system queries - assertFalse(rs.getString(QUERY).toString().contains(SYSTEM_CATALOG_SCHEMA)); + while (rs.next()) { + if (rs.getString(QUERY_ID).equals(queryId)) { + foundQueryLog = true; + assertEquals(rs.getString(BIND_PARAMETERS), null); + assertEquals(rs.getString(USER), System.getProperty("user.name")); + assertEquals(rs.getString(CLIENT_IP), InetAddress.getLocalHost().getHostAddress()); + assertEquals(rs.getString(EXPLAIN_PLAN), QueryUtil.getExplainPlan(explainRS)); + assertEquals(rs.getString(GLOBAL_SCAN_DETAILS), context.getScan().toJSON()); + assertEquals(rs.getLong(NO_OF_RESULTS_ITERATED), 10); + assertEquals(rs.getString(QUERY), query); + assertEquals(rs.getString(QUERY_STATUS), QueryStatus.COMPLETED.toString()); + assertEquals(rs.getString(TENANT_ID), null); + assertTrue(rs.getString(SCAN_METRICS_JSON) == null); + assertEquals(rs.getString(EXCEPTION_TRACE), null); + } else { + //confirm we are not logging system queries + assertFalse(rs.getString(QUERY).toString().contains(SYSTEM_CATALOG_SCHEMA)); + } } + assertTrue(foundQueryLog); + conn.close(); } - assertTrue(foundQueryLog); - conn.close(); } @Test @@ -155,12 +158,12 @@ public class QueryLoggerIT extends BaseUniqueNamesOwnClusterIT { String query = "SELECT * FROM " + tableName; int count=100; for (int i = 0; i < count; i++) { - ResultSet rs = conn.createStatement().executeQuery(query); - while(rs.next()){ - + try (ResultSet rs = conn.createStatement().executeQuery(query)) { + while (rs.next()) { + + } } } - String logQuery = "SELECT * FROM " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_LOG_TABLE + "\""; int delay = 5000; @@ -187,37 +190,39 @@ public class QueryLoggerIT extends BaseUniqueNamesOwnClusterIT { Connection conn = DriverManager.getConnection(getUrl(),props); assertEquals(conn.unwrap(PhoenixConnection.class).getLogLevel(),LogLevel.INFO); String query = "SELECT * FROM " + tableName; - - ResultSet rs = conn.createStatement().executeQuery(query); - StatementContext context = ((PhoenixResultSet)rs).getContext(); - String queryId = context.getQueryLogger().getQueryId(); - while (rs.next()) { - rs.getString(1); - rs.getString(2); + StatementContext context; + try (ResultSet rs = conn.createStatement().executeQuery(query)) { + context = ((PhoenixResultSet) rs).getContext(); + while (rs.next()) { + rs.getString(1); + rs.getString(2); + } } + String queryId = context.getQueryLogger().getQueryId(); String logQuery = "SELECT * FROM " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_LOG_TABLE + "\""; int delay = 5000; // sleep for sometime to let query log committed Thread.sleep(delay); - rs = conn.createStatement().executeQuery(logQuery); - boolean foundQueryLog = false; - while (rs.next()) { - if (rs.getString(QUERY_ID).equals(queryId)) { - foundQueryLog = true; - assertEquals(rs.getString(USER), System.getProperty("user.name")); - assertEquals(rs.getString(CLIENT_IP), InetAddress.getLocalHost().getHostAddress()); - assertEquals(rs.getString(EXPLAIN_PLAN), null); - assertEquals(rs.getString(GLOBAL_SCAN_DETAILS),null); - assertEquals(rs.getLong(NO_OF_RESULTS_ITERATED), 10); - assertEquals(rs.getString(QUERY), query); - assertEquals(rs.getString(QUERY_STATUS),QueryStatus.COMPLETED.toString()); - assertEquals(rs.getString(TENANT_ID), null); + try (ResultSet rs = conn.createStatement().executeQuery(logQuery)) { + boolean foundQueryLog = false; + while (rs.next()) { + if (rs.getString(QUERY_ID).equals(queryId)) { + foundQueryLog = true; + assertEquals(rs.getString(USER), System.getProperty("user.name")); + assertEquals(rs.getString(CLIENT_IP), InetAddress.getLocalHost().getHostAddress()); + assertEquals(rs.getString(EXPLAIN_PLAN), null); + assertEquals(rs.getString(GLOBAL_SCAN_DETAILS), null); + assertEquals(rs.getLong(NO_OF_RESULTS_ITERATED), 10); + assertEquals(rs.getString(QUERY), query); + assertEquals(rs.getString(QUERY_STATUS), QueryStatus.COMPLETED.toString()); + assertEquals(rs.getString(TENANT_ID), null); + } } + assertTrue(foundQueryLog); + conn.close(); } - assertTrue(foundQueryLog); - conn.close(); } @Test @@ -275,46 +280,50 @@ public class QueryLoggerIT extends BaseUniqueNamesOwnClusterIT { final MyClock clock = new MyClock(100); EnvironmentEdgeManager.injectEdge(clock); try{ - String query = "SELECT * FROM " + tableName +" where V = ?"; - - PreparedStatement pstmt = conn.prepareStatement(query); - pstmt.setString(1, "value5"); - ResultSet rs = pstmt.executeQuery(); - StatementContext context = ((PhoenixResultSet)rs).getContext(); - String queryId = context.getQueryLogger().getQueryId(); - while (rs.next()) { - rs.getString(1); - rs.getString(2); - } - ResultSet explainRS = conn.createStatement() - .executeQuery("Explain " + "SELECT * FROM " + tableName + " where V = 'value5'"); - String logQuery = "SELECT * FROM " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_LOG_TABLE + "\""; - int delay = 5000; + String query = "SELECT * FROM " + tableName +" where V = ?"; + StatementContext context; + PreparedStatement pstmt = conn.prepareStatement(query); + pstmt.setString(1, "value5"); + try (ResultSet rs = pstmt.executeQuery()) { + context = ((PhoenixResultSet) rs).getContext(); + while (rs.next()) { + rs.getString(1); + rs.getString(2); + } + } + String queryId = context.getQueryLogger().getQueryId(); - // sleep for sometime to let query log committed - Thread.sleep(delay); - rs = conn.createStatement().executeQuery(logQuery); - boolean foundQueryLog = false; - while (rs.next()) { - if (rs.getString(QUERY_ID).equals(queryId)) { - foundQueryLog = true; - assertEquals(rs.getString(BIND_PARAMETERS), loglevel == LogLevel.TRACE ? "value5" : null); - assertEquals(rs.getString(USER), System.getProperty("user.name")); - assertEquals(rs.getString(CLIENT_IP), InetAddress.getLocalHost().getHostAddress()); - assertEquals(rs.getString(EXPLAIN_PLAN), QueryUtil.getExplainPlan(explainRS)); - assertEquals(rs.getString(GLOBAL_SCAN_DETAILS), context.getScan().toJSON()); - assertEquals(rs.getLong(NO_OF_RESULTS_ITERATED), 1); - assertEquals(rs.getString(QUERY), query); - assertEquals(rs.getString(QUERY_STATUS), QueryStatus.COMPLETED.toString()); - assertTrue(LogLevel.TRACE == loglevel ? rs.getString(SCAN_METRICS_JSON).contains("scanMetrics") - : rs.getString(SCAN_METRICS_JSON) == null); - assertEquals(rs.getTimestamp(START_TIME).getTime(),100); - assertEquals(rs.getString(TENANT_ID), null); + String logQuery = "SELECT * FROM " + SYSTEM_CATALOG_SCHEMA + ".\"" + SYSTEM_LOG_TABLE + "\""; + int delay = 5000; + + // sleep for sometime to let query log committed + Thread.sleep(delay); + String explainQuery = "Explain " + "SELECT * FROM " + tableName + " where V = 'value5'"; + try (ResultSet explainRS = conn.createStatement() + .executeQuery(explainQuery); + ResultSet rs = conn.createStatement().executeQuery(logQuery)) { + boolean foundQueryLog = false; + while (rs.next()) { + if (rs.getString(QUERY_ID).equals(queryId)) { + foundQueryLog = true; + assertEquals(rs.getString(BIND_PARAMETERS), loglevel == LogLevel.TRACE ? "value5" : null); + assertEquals(rs.getString(USER), System.getProperty("user.name")); + assertEquals(rs.getString(CLIENT_IP), InetAddress.getLocalHost().getHostAddress()); + assertEquals(rs.getString(EXPLAIN_PLAN), QueryUtil.getExplainPlan(explainRS)); + assertEquals(rs.getString(GLOBAL_SCAN_DETAILS), context.getScan().toJSON()); + assertEquals(rs.getLong(NO_OF_RESULTS_ITERATED), 1); + assertEquals(rs.getString(QUERY), query); + assertEquals(rs.getString(QUERY_STATUS), QueryStatus.COMPLETED.toString()); + assertTrue(LogLevel.TRACE == loglevel ? rs.getString(SCAN_METRICS_JSON).contains("scanMetrics") + : rs.getString(SCAN_METRICS_JSON) == null); + assertEquals(rs.getTimestamp(START_TIME).getTime(), 100); + assertEquals(rs.getString(TENANT_ID), null); + } + } + assertTrue(foundQueryLog); + conn.close(); } - } - assertTrue(foundQueryLog); - conn.close(); - }finally{ + }finally { EnvironmentEdgeManager.injectEdge(null); } } diff --git a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixResultSet.java b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixResultSet.java index b99ece6..016aa8f 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixResultSet.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixResultSet.java @@ -839,9 +839,7 @@ public class PhoenixResultSet implements ResultSet, SQLCloseable { overAllQueryMetrics.startResultSetWatch(); } currentRow = scanner.next(); - if (currentRow == null) { - close(); - }else{ + if (currentRow != null) { count++; // Reset this projector with each row if (this.rowProjectorWithDynamicCols != null) {