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);
     }
     

Reply via email to