You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2021/01/13 06:16:25 UTC
[shardingsphere] branch master updated: get result set from
CalciteExecutor (#9009)
This is an automated email from the ASF dual-hosted git repository.
menghaoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 6afd321 get result set from CalciteExecutor (#9009)
6afd321 is described below
commit 6afd3212e6fdc7c9a5f97d99f0cc689e8b325e13
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Wed Jan 13 14:15:53 2021 +0800
get result set from CalciteExecutor (#9009)
---
.../infra/optimize/execute/CalciteExecutor.java | 9 +++++++++
.../infra/optimize/execute/CalciteJDBCExecutor.java | 5 +++++
.../infra/optimize/execute/raw/CalciteRawExecutor.java | 6 ++++++
.../core/statement/ShardingSpherePreparedStatement.java | 9 ++++++++-
.../driver/jdbc/core/statement/ShardingSphereStatement.java | 13 ++++++++++---
5 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/CalciteExecutor.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/CalciteExecutor.java
index 6e17098..9b305b1 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/CalciteExecutor.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/CalciteExecutor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.optimize.execute;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
+import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@@ -43,4 +44,12 @@ public interface CalciteExecutor {
* @throws SQLException SQL exception
*/
void close() throws SQLException;
+
+ /**
+ * Get result set.
+ *
+ * @return result set
+ * @throws SQLException sql exception
+ */
+ ResultSet getResultSet() throws SQLException;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/CalciteJDBCExecutor.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/CalciteJDBCExecutor.java
index 5e8b0e5..58787af 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/CalciteJDBCExecutor.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/CalciteJDBCExecutor.java
@@ -76,6 +76,11 @@ public final class CalciteJDBCExecutor implements CalciteExecutor {
statement.close();
}
+ @Override
+ public ResultSet getResultSet() throws SQLException {
+ return statement.getResultSet();
+ }
+
private ResultSet execute(final String sql, final List<Object> parameters) throws SQLException {
PreparedStatement statement = getConnection().prepareStatement(sql);
setParameters(statement, parameters);
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/raw/CalciteRawExecutor.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/raw/CalciteRawExecutor.java
index 44e9894..c749bc4 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/raw/CalciteRawExecutor.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/execute/raw/CalciteRawExecutor.java
@@ -34,6 +34,7 @@ import org.apache.shardingsphere.infra.optimize.context.CalciteContext;
import org.apache.shardingsphere.infra.optimize.execute.CalciteExecutor;
import org.apache.shardingsphere.infra.optimize.execute.raw.context.CalciteDataContext;
+import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
@@ -57,6 +58,11 @@ public final class CalciteRawExecutor implements CalciteExecutor {
// TODO
}
+ @Override
+ public ResultSet getResultSet() throws SQLException {
+ return null;
+ }
+
private Enumerable<Object[]> execute(final String sql) throws SqlParseException {
// TODO The below will be replaced by SqlNodeConverter.
SqlNode sqlNode = SqlParser.create(sql, context.getParserConfig()).parseQuery();
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index fd2e10a..82cc380 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -177,7 +177,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
executionContext = createExecutionContext();
List<QueryResult> queryResults = executeQuery0();
MergedResult mergedResult = mergeQuery(queryResults);
- result = new ShardingSphereResultSet(statements.stream().map(this::getResultSet).collect(Collectors.toList()), mergedResult, this, executionContext);
+ result = new ShardingSphereResultSet(getResultSetsForShardingSphereResultSet(), mergedResult, this, executionContext);
} finally {
clearBatch();
}
@@ -185,6 +185,13 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
return result;
}
+ private List<ResultSet> getResultSetsForShardingSphereResultSet() throws SQLException {
+ if (null != calciteExecutor) {
+ return Collections.singletonList(calciteExecutor.getResultSet());
+ }
+ return statements.stream().map(this::getResultSet).collect(Collectors.toList());
+ }
+
private List<QueryResult> executeQuery0() throws SQLException {
if (metaDataContexts.getDefaultMetaData().getRuleMetaData().getRules().stream().anyMatch(each -> each instanceof RawExecutionRule)) {
return rawExecutor.execute(createRawExecutionGroups(), new RawSQLExecutorCallback()).stream().map(each -> (QueryResult) each).collect(Collectors.toList());
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 6f7df62..89848a6 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -144,9 +144,9 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
ResultSet result;
try {
executionContext = createExecutionContext(sql);
- List<QueryResult> queryResults = executeQuery();
+ List<QueryResult> queryResults = executeQuery0();
MergedResult mergedResult = mergeQuery(queryResults);
- result = new ShardingSphereResultSet(statements.stream().map(this::getResultSet).collect(Collectors.toList()), mergedResult, this, executionContext);
+ result = new ShardingSphereResultSet(getResultSetsForShardingSphereResultSet(), mergedResult, this, executionContext);
} finally {
currentResultSet = null;
}
@@ -154,7 +154,14 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
return result;
}
- private List<QueryResult> executeQuery() throws SQLException {
+ private List<ResultSet> getResultSetsForShardingSphereResultSet() throws SQLException {
+ if (null != calciteExecutor) {
+ return Collections.singletonList(calciteExecutor.getResultSet());
+ }
+ return statements.stream().map(this::getResultSet).collect(Collectors.toList());
+ }
+
+ private List<QueryResult> executeQuery0() throws SQLException {
if (metaDataContexts.getDefaultMetaData().getRuleMetaData().getRules().stream().anyMatch(each -> each instanceof RawExecutionRule)) {
return rawExecutor.execute(createRawExecutionGroups(), new RawSQLExecutorCallback()).stream().map(each -> (QueryResult) each).collect(Collectors.toList());
}