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

zhaojinchao 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 e09700ac1ca Exclude database required DAL statements from unicast 
scenario (#29493)
e09700ac1ca is described below

commit e09700ac1caf63a815ba61ea098f2ac1026347db
Author: Raigor <[email protected]>
AuthorDate: Fri Dec 22 10:17:06 2023 +0800

    Exclude database required DAL statements from unicast scenario (#29493)
---
 .../backend/handler/data/DatabaseBackendHandlerFactory.java   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseBackendHandlerFactory.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseBackendHandlerFactory.java
index 59df99d9d87..bd534957afb 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseBackendHandlerFactory.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseBackendHandlerFactory.java
@@ -19,8 +19,8 @@ package org.apache.shardingsphere.proxy.backend.handler.data;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.proxy.backend.connector.DatabaseConnectorFactory;
 import 
org.apache.shardingsphere.proxy.backend.handler.data.impl.UnicastDatabaseBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -30,6 +30,9 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatemen
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SetStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DoStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCreateTableStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTableStatusStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
 
 /**
  * Database backend handler factory.
@@ -54,9 +57,13 @@ public final class DatabaseBackendHandlerFactory {
         if (sqlStatement instanceof SetStatement && null == 
connectionSession.getDatabaseName()) {
             return () -> new UpdateResponseHeader(sqlStatement);
         }
-        if (sqlStatement instanceof DALStatement || sqlStatement instanceof 
SelectStatement && null == ((SelectStatement) sqlStatement).getFrom()) {
+        if (sqlStatement instanceof DALStatement && 
!isDatabaseRequiredDALStatement(sqlStatement) || sqlStatement instanceof 
SelectStatement && null == ((SelectStatement) sqlStatement).getFrom()) {
             return new UnicastDatabaseBackendHandler(queryContext, 
connectionSession);
         }
         return 
DatabaseConnectorFactory.getInstance().newInstance(queryContext, 
connectionSession.getDatabaseConnectionManager(), preferPreparedStatement);
     }
+    
+    private static boolean isDatabaseRequiredDALStatement(final SQLStatement 
sqlStatement) {
+        return sqlStatement instanceof MySQLShowTablesStatement || 
sqlStatement instanceof MySQLShowTableStatusStatement || sqlStatement 
instanceof MySQLShowCreateTableStatement;
+    }
 }

Reply via email to