You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by pb...@apache.org on 2019/05/01 07:36:41 UTC
[phoenix] 03/12: PhoenixResultSet#next() closes the result set if
scanner returns null
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....@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) {