This is an automated email from the ASF dual-hosted git repository.

terrymanu 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 17b14c4fc97 Refactor MySQLComQueryBackendHandlerFactory (#39446)
17b14c4fc97 is described below

commit 17b14c4fc97b5282732118dca0366c59d6e9d567
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Aug 13 21:14:45 2026 +0800

    Refactor MySQLComQueryBackendHandlerFactory (#39446)
    
    * Refine gen-ut quality gates
    
    - keep semantic decisions out of mechanical rule scans
    - harden coverage and task-scope verification
    - remove unsafe gate-result reuse and add regression tests
    
    * Refine gen-ut quality gates
    
    - keep semantic decisions out of mechanical rule scans
    - harden coverage and task-scope verification
    - remove unsafe gate-result reuse and add regression tests
    
    * Refine gen-ut quality gates
    
    - keep semantic decisions out of mechanical rule scans
    - harden coverage and task-scope verification
    - remove unsafe gate-result reuse and add regression tests
    
    * Refine gen-ut quality gates
    
    - keep semantic decisions out of mechanical rule scans
    - harden coverage and task-scope verification
    - remove unsafe gate-result reuse and add regression tests
    
    * Refactor MySQL COM_QUERY original SQL byte handling
    
    * Refine issue analysis and PR review skills
    
    * Refactor MySQLComQueryBackendHandlerFactory
---
 .../query/text/query/MySQLComQueryBackendHandlerFactory.java  | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git 
a/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryBackendHandlerFactory.java
 
b/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryBackendHandlerFactory.java
index e97fdf9cb91..06766f3ffa3 100644
--- 
a/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryBackendHandlerFactory.java
+++ 
b/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryBackendHandlerFactory.java
@@ -45,7 +45,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.Up
 import 
org.apache.shardingsphere.sql.parser.statement.core.util.MultiSQLSplitter;
 
 import java.sql.SQLException;
-import java.util.List;
 import java.util.Optional;
 
 /**
@@ -61,11 +60,11 @@ final class MySQLComQueryBackendHandlerFactory {
     static ProxyBackendHandler newInstance(final MySQLComQueryPacket packet, 
final ConnectionSession connectionSession) throws SQLException {
         DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
         String sql = packet.getSQL();
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
         Optional<ProxyBackendHandler> binaryLiteralHandler = 
tryCreateBinaryLiteralHandler(databaseType, sql, packet, connectionSession);
         if (binaryLiteralHandler.isPresent()) {
             return binaryLiteralHandler.get();
         }
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
         return areMultiStatements(connectionSession, sqlStatement, sql)
                 ? new 
MySQLMultiStatementsProxyBackendHandler(connectionSession, sqlStatement, sql)
                 : ProxyBackendHandlerFactory.newInstance(databaseType, sql, 
sqlStatement, connectionSession, packet.getHintValueContext());
@@ -83,7 +82,6 @@ final class MySQLComQueryBackendHandlerFactory {
             return Optional.empty();
         }
         String parameterizedSQL = 
SQLHintUtils.removeHint(extractionResult.getSql());
-        List<Object> binaryLiteralValues = 
extractionResult.getBinaryLiteralValues();
         SQLStatement parameterizedSQLStatement;
         try {
             parameterizedSQLStatement = 
ProxySQLComQueryParser.parse(parameterizedSQL, databaseType, connectionSession);
@@ -93,10 +91,10 @@ final class MySQLComQueryBackendHandlerFactory {
         ShardingSphereMetaData metaData = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData();
         SQLStatementContext sqlStatementContext = new SQLBindEngine(metaData, 
connectionSession.getCurrentDatabaseName(), 
packet.getHintValueContext()).bind(parameterizedSQLStatement);
         if (sqlStatementContext instanceof ParameterAware) {
-            ((ParameterAware) 
sqlStatementContext).bindParameters(binaryLiteralValues);
+            ((ParameterAware) 
sqlStatementContext).bindParameters(extractionResult.getBinaryLiteralValues());
         }
         QueryContext queryContext = new QueryContext(
-                sqlStatementContext, parameterizedSQL, binaryLiteralValues, 
packet.getHintValueContext(), connectionSession.getConnectionContext(), 
metaData, true);
+                sqlStatementContext, parameterizedSQL, 
extractionResult.getBinaryLiteralValues(), packet.getHintValueContext(), 
connectionSession.getConnectionContext(), metaData, true);
         return 
Optional.of(ProxyBackendHandlerFactory.newInstance(databaseType, queryContext, 
connectionSession, true));
     }
     
@@ -112,8 +110,7 @@ final class MySQLComQueryBackendHandlerFactory {
     
     private static boolean areMultiStatements(final ConnectionSession 
connectionSession, final SQLStatement sqlStatement, final String sql) {
         return isMultiStatementsEnabled(connectionSession)
-                && isSuitableMultiStatementsSQLStatement(sqlStatement)
-                && MultiSQLSplitter.hasSameTypeMultiStatements(sqlStatement, 
MultiSQLSplitter.split(sql));
+                && isSuitableMultiStatementsSQLStatement(sqlStatement) && 
MultiSQLSplitter.hasSameTypeMultiStatements(sqlStatement, 
MultiSQLSplitter.split(sql));
     }
     
     private static boolean isMultiStatementsEnabled(final ConnectionSession 
connectionSession) {

Reply via email to