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