This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 1c4f64de211 Refactor ShardingSphereStatement (#31524)
1c4f64de211 is described below
commit 1c4f64de21139fe1df9e49658ed5d14a2187046f
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jun 2 13:28:29 2024 +0800
Refactor ShardingSphereStatement (#31524)
* Refactor ShardingSphereStatement
* Refactor ShardingSphereStatement
* Refactor ShardingSphereStatement
---
.../statement/ShardingSpherePreparedStatement.java | 6 +--
.../core/statement/ShardingSphereStatement.java | 52 +++++++++-------------
2 files changed, 23 insertions(+), 35 deletions(-)
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index a3dfffaa2fa..2c7ccd7150d 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.driver.jdbc.core.statement;
-import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.Getter;
import org.apache.shardingsphere.driver.executor.DriverExecutor;
@@ -39,6 +38,7 @@ import
org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine;
import
org.apache.shardingsphere.infra.exception.kernel.syntax.EmptySQLException;
import org.apache.shardingsphere.infra.executor.audit.SQLAuditEngine;
@@ -166,9 +166,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
private ShardingSpherePreparedStatement(final ShardingSphereConnection
connection, final String sql,
final int resultSetType, final int
resultSetConcurrency, final int resultSetHoldability, final boolean
returnGeneratedKeys,
final String[] columns) throws
SQLException {
- if (Strings.isNullOrEmpty(sql)) {
- throw new EmptySQLException().toSQLException();
- }
+ ShardingSpherePreconditions.checkNotEmpty(sql, () -> new
EmptySQLException().toSQLException());
this.connection = connection;
metaData =
connection.getContextManager().getMetaDataContexts().getMetaData();
hintValueContext = SQLHintUtils.extractHint(sql);
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index c5d258b977f..5249ff22f86 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -120,15 +120,10 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
@Override
public ResultSet executeQuery(final String sql) throws SQLException {
- ShardingSpherePreconditions.checkNotEmpty(sql, () -> new
EmptySQLException().toSQLException());
+ QueryContext queryContext = createQueryContext(sql);
try {
- QueryContext queryContext = createQueryContext(sql);
-
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
- databaseName =
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
-
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+ prepareExecute(queryContext);
ShardingSphereDatabase database =
metaData.getDatabase(databaseName);
- sqlStatementContext = queryContext.getSqlStatementContext();
- clearStatements();
currentResultSet = executor.executeQuery(database, queryContext,
createDriverExecutionPrepareEngine(database), this, null,
(StatementReplayCallback<Statement>) (statements,
parameterSets) -> replay(statements));
statements.addAll(executor.getStatements());
@@ -157,14 +152,13 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
// CHECKSTYLE:ON
handleExceptionInTransaction(connection, metaData);
throw SQLExceptionTransformEngine.toSQLException(ex,
metaData.getDatabase(databaseName).getProtocolType());
- } finally {
- currentResultSet = null;
}
}
@Override
public int executeUpdate(final String sql, final int autoGeneratedKeys)
throws SQLException {
if (RETURN_GENERATED_KEYS == autoGeneratedKeys) {
+ currentResultSet = null;
returnGeneratedKeys = true;
}
try {
@@ -174,8 +168,6 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
// CHECKSTYLE:ON
handleExceptionInTransaction(connection, metaData);
throw SQLExceptionTransformEngine.toSQLException(ex,
metaData.getDatabase(databaseName).getProtocolType());
- } finally {
- currentResultSet = null;
}
}
@@ -189,8 +181,6 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
// CHECKSTYLE:ON
handleExceptionInTransaction(connection, metaData);
throw SQLExceptionTransformEngine.toSQLException(ex,
metaData.getDatabase(databaseName).getProtocolType());
- } finally {
- currentResultSet = null;
}
}
@@ -204,19 +194,14 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
// CHECKSTYLE:ON
handleExceptionInTransaction(connection, metaData);
throw SQLExceptionTransformEngine.toSQLException(ex,
metaData.getDatabase(databaseName).getProtocolType());
- } finally {
- currentResultSet = null;
}
}
private int executeUpdate(final String sql, final ExecuteUpdateCallback
updateCallback) throws SQLException {
+ currentResultSet = null;
QueryContext queryContext = createQueryContext(sql);
-
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
- databaseName =
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
-
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+ prepareExecute(queryContext);
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
- sqlStatementContext = queryContext.getSqlStatementContext();
- clearStatements();
int result = executor.executeUpdate(database, queryContext,
createDriverExecutionPrepareEngine(database), updateCallback,
(StatementReplayCallback<Statement>) (statements,
parameterSets) -> replay(statements));
statements.addAll(executor.getStatements());
@@ -226,7 +211,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
@Override
public boolean execute(final String sql) throws SQLException {
try {
- return execute0(sql, (actualSQL, statement) ->
statement.execute(actualSQL));
+ return execute(sql, (actualSQL, statement) ->
statement.execute(actualSQL));
// CHECKSTYLE:OFF
} catch (final SQLException ex) {
// CHECKSTYLE:ON
@@ -241,7 +226,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
if (RETURN_GENERATED_KEYS == autoGeneratedKeys) {
returnGeneratedKeys = true;
}
- return execute0(sql, (actualSQL, statement) ->
statement.execute(actualSQL, autoGeneratedKeys));
+ return execute(sql, (actualSQL, statement) ->
statement.execute(actualSQL, autoGeneratedKeys));
// CHECKSTYLE:OFF
} catch (final SQLException ex) {
// CHECKSTYLE:ON
@@ -254,7 +239,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
public boolean execute(final String sql, final int[] columnIndexes) throws
SQLException {
try {
returnGeneratedKeys = true;
- return execute0(sql, (actualSQL, statement) ->
statement.execute(actualSQL, columnIndexes));
+ return execute(sql, (actualSQL, statement) ->
statement.execute(actualSQL, columnIndexes));
// CHECKSTYLE:OFF
} catch (final SQLException ex) {
// CHECKSTYLE:ON
@@ -267,7 +252,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
public boolean execute(final String sql, final String[] columnNames)
throws SQLException {
try {
returnGeneratedKeys = true;
- return execute0(sql, (actualSQL, statement) ->
statement.execute(actualSQL, columnNames));
+ return execute(sql, (actualSQL, statement) ->
statement.execute(actualSQL, columnNames));
// CHECKSTYLE:OFF
} catch (final SQLException ex) {
// CHECKSTYLE:ON
@@ -276,21 +261,25 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
}
}
- private boolean execute0(final String sql, final ExecuteCallback
executeCallback) throws SQLException {
+ private boolean execute(final String sql, final ExecuteCallback
executeCallback) throws SQLException {
currentResultSet = null;
QueryContext queryContext = createQueryContext(sql);
-
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
- databaseName =
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
-
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+ prepareExecute(queryContext);
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
- sqlStatementContext = queryContext.getSqlStatementContext();
- clearStatements();
boolean result = executor.executeAdvance(database, queryContext,
createDriverExecutionPrepareEngine(database),
executeCallback, (StatementReplayCallback<Statement>)
(statements, parameterSets) -> replay(statements));
statements.addAll(executor.getStatements());
return result;
}
+ private void prepareExecute(final QueryContext queryContext) throws
SQLException {
+
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
+ databaseName =
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
+
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+ sqlStatementContext = queryContext.getSqlStatementContext();
+ clearStatements();
+ }
+
private void handleAutoCommit(final SQLStatement sqlStatement) throws
SQLException {
if (AutoCommitUtils.needOpenTransaction(sqlStatement)) {
connection.handleAutoCommit();
@@ -320,7 +309,8 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
return batchStatementExecutor.executeBatch();
}
- private QueryContext createQueryContext(final String originSQL) {
+ private QueryContext createQueryContext(final String originSQL) throws
SQLException {
+ ShardingSpherePreconditions.checkNotEmpty(originSQL, () -> new
EmptySQLException().toSQLException());
SQLParserRule sqlParserRule =
metaData.getGlobalRuleMetaData().getSingleRule(SQLParserRule.class);
String sql = SQLHintUtils.removeHint(originSQL);
HintValueContext hintValueContext =
SQLHintUtils.extractHint(originSQL);