This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 44acfffff5b Refactor ProxyBackendHandlerFactory (#36782)
44acfffff5b is described below
commit 44acfffff5b18ba785e0391d501d3eb8572689f0
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Oct 4 23:57:54 2025 +0800
Refactor ProxyBackendHandlerFactory (#36782)
* Refactor ProxyBackendHandlerFactory
* Refactor ProxyBackendHandlerFactory
---
.../proxy/backend/handler/ProxyBackendHandlerFactory.java | 9 ++++-----
.../execute/FirebirdExecuteStatementCommandExecutor.java | 1 -
.../query/binary/execute/MySQLComStmtExecuteExecutor.java | 1 -
.../command/query/text/query/MySQLComQueryPacketExecutor.java | 3 ++-
.../proxy/frontend/postgresql/command/query/extended/Portal.java | 3 +--
5 files changed, 7 insertions(+), 10 deletions(-)
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
index 503fbc58b36..8d6d8548f41 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
@@ -90,13 +90,11 @@ public final class ProxyBackendHandlerFactory {
if (sqlStatement instanceof EmptyStatement) {
return new SkipBackendHandler(sqlStatement);
}
+ ShardingSphereMetaData metaData =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData();
SQLStatementContext sqlStatementContext = sqlStatement instanceof
DistSQLStatement
? new DistSQLStatementContext((DistSQLStatement) sqlStatement)
- : new
SQLBindEngine(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(),
- connectionSession.getCurrentDatabaseName(),
hintValueContext).bind(sqlStatement);
- QueryContext queryContext = new QueryContext(sqlStatementContext, sql,
Collections.emptyList(), hintValueContext,
connectionSession.getConnectionContext(),
-
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData());
- connectionSession.setQueryContext(queryContext);
+ : new SQLBindEngine(metaData,
connectionSession.getCurrentDatabaseName(),
hintValueContext).bind(sqlStatement);
+ QueryContext queryContext = new QueryContext(sqlStatementContext, sql,
Collections.emptyList(), hintValueContext,
connectionSession.getConnectionContext(), metaData);
return newInstance(databaseType, queryContext, connectionSession,
false);
}
@@ -112,6 +110,7 @@ public final class ProxyBackendHandlerFactory {
*/
public static ProxyBackendHandler newInstance(final DatabaseType
databaseType, final QueryContext queryContext,
final ConnectionSession
connectionSession, final boolean preferPreparedStatement) throws SQLException {
+ connectionSession.setQueryContext(queryContext);
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
allowExecutingWhenTransactionalError(databaseType, connectionSession,
sqlStatement);
diff --git
a/proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/execute/FirebirdExecuteStatementCommandExecutor.java
b/proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/execute/FirebirdExecuteStatementCommandExecutor.java
index 0e2b6eee567..aa75a056e50 100644
---
a/proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/execute/FirebirdExecuteStatementCommandExecutor.java
+++
b/proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/execute/FirebirdExecuteStatementCommandExecutor.java
@@ -77,7 +77,6 @@ public final class FirebirdExecuteStatementCommandExecutor
implements QueryComma
}
QueryContext queryContext = new QueryContext(sqlStatementContext,
preparedStatement.getSql(), params, preparedStatement.getHintValueContext(),
connectionSession.getConnectionContext(),
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(),
true);
- connectionSession.setQueryContext(queryContext);
proxyBackendHandler =
ProxyBackendHandlerFactory.newInstance(TypedSPILoader.getService(DatabaseType.class,
"Firebird"), queryContext, connectionSession, true);
ResponseHeader responseHeader = proxyBackendHandler.execute();
if (responseHeader instanceof QueryResponseHeader) {
diff --git
a/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
b/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
index b1267345fab..7ede71b8f49 100644
---
a/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
+++
b/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
@@ -79,7 +79,6 @@ public final class MySQLComStmtExecuteExecutor implements
QueryCommandExecutor {
}
QueryContext queryContext = new QueryContext(sqlStatementContext,
preparedStatement.getSql(), params, preparedStatement.getHintValueContext(),
connectionSession.getConnectionContext(),
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(),
true);
- connectionSession.setQueryContext(queryContext);
proxyBackendHandler =
ProxyBackendHandlerFactory.newInstance(TypedSPILoader.getService(DatabaseType.class,
"MySQL"), queryContext, connectionSession, true);
ResponseHeader responseHeader = proxyBackendHandler.execute();
return responseHeader instanceof QueryResponseHeader ?
processQuery((QueryResponseHeader) responseHeader) :
processUpdate((UpdateResponseHeader) responseHeader);
diff --git
a/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
b/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
index 7b2db7d790e..49d1ebf11ea 100644
---
a/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
+++
b/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
@@ -65,7 +65,8 @@ public final class MySQLComQueryPacketExecutor implements
QueryCommandExecutor {
this.connectionSession = connectionSession;
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "MySQL");
SQLStatement sqlStatement =
ProxySQLComQueryParser.parse(packet.getSQL(), databaseType, connectionSession);
- proxyBackendHandler = areMultiStatements(connectionSession,
sqlStatement, packet.getSQL()) ? new
MySQLMultiStatementsHandler(connectionSession, sqlStatement, packet.getSQL())
+ proxyBackendHandler = areMultiStatements(connectionSession,
sqlStatement, packet.getSQL())
+ ? new MySQLMultiStatementsHandler(connectionSession,
sqlStatement, packet.getSQL())
: ProxyBackendHandlerFactory.newInstance(databaseType,
packet.getSQL(), sqlStatement, connectionSession, packet.getHintValueContext());
characterSet =
connectionSession.getAttributeMap().attr(MySQLConstants.CHARACTER_SET_ATTRIBUTE_KEY).get().getId();
}
diff --git
a/proxy/frontend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/Portal.java
b/proxy/frontend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/Portal.java
index ccf4545e04c..fb38e601df3 100644
---
a/proxy/frontend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/Portal.java
+++
b/proxy/frontend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/Portal.java
@@ -83,7 +83,7 @@ public final class Portal {
public Portal(final String name, final PostgreSQLServerPreparedStatement
preparedStatement, final List<Object> params, final List<PostgreSQLValueFormat>
resultFormats,
final ProxyDatabaseConnectionManager
databaseConnectionManager) throws SQLException {
this.name = name;
- this.sqlStatement =
preparedStatement.getSqlStatementContext().getSqlStatement();
+ sqlStatement =
preparedStatement.getSqlStatementContext().getSqlStatement();
this.resultFormats = resultFormats;
this.databaseConnectionManager = databaseConnectionManager;
String databaseName =
databaseConnectionManager.getConnectionSession().getCurrentDatabaseName();
@@ -94,7 +94,6 @@ public final class Portal {
DatabaseType protocolType =
ProxyContext.getInstance().getContextManager().getDatabase(databaseName).getProtocolType();
QueryContext queryContext = new QueryContext(sqlStatementContext,
preparedStatement.getSql(), params, preparedStatement.getHintValueContext(),
databaseConnectionManager.getConnectionSession().getConnectionContext(),
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(),
true);
-
databaseConnectionManager.getConnectionSession().setQueryContext(queryContext);
proxyBackendHandler =
ProxyBackendHandlerFactory.newInstance(protocolType, queryContext,
databaseConnectionManager.getConnectionSession(), true);
}