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

duanzhengqiang 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 d8e0c48cd8a Add DialectDatabaseMetaData.isDDLNeedImplicitCommit() to 
decouple Firebrid database type in driver module (#33783)
d8e0c48cd8a is described below

commit d8e0c48cd8a607a99d1bb01effd42b4ac508c3fe
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Nov 24 21:51:54 2024 +0800

    Add DialectDatabaseMetaData.isDDLNeedImplicitCommit() to decouple Firebrid 
database type in driver module (#33783)
---
 .../core/metadata/database/DialectDatabaseMetaData.java   |  9 +++++++++
 .../metadata/database/FirebirdDatabaseMetaData.java       |  5 +++++
 .../pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java  | 15 ++++++++-------
 .../jdbc/DriverJDBCPushDownExecuteUpdateExecutor.java     | 15 ++++++++-------
 4 files changed, 30 insertions(+), 14 deletions(-)

diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/DialectDatabaseMetaData.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/DialectDatabaseMetaData.java
index c62f2bc6de5..1a8eecca89c 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/DialectDatabaseMetaData.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/DialectDatabaseMetaData.java
@@ -138,4 +138,13 @@ public interface DialectDatabaseMetaData extends 
DatabaseTypedSPI {
     default boolean isSupportGlobalCSN() {
         return false;
     }
+    
+    /**
+     * Whether DDL need implicit commit.
+     *
+     * @return need or not
+     */
+    default boolean isDDLNeedImplicitCommit() {
+        return false;
+    }
 }
diff --git 
a/infra/database/type/firebird/src/main/java/org/apache/shardingsphere/infra/database/firebird/metadata/database/FirebirdDatabaseMetaData.java
 
b/infra/database/type/firebird/src/main/java/org/apache/shardingsphere/infra/database/firebird/metadata/database/FirebirdDatabaseMetaData.java
index a03a6e59680..cf86f821b7b 100644
--- 
a/infra/database/type/firebird/src/main/java/org/apache/shardingsphere/infra/database/firebird/metadata/database/FirebirdDatabaseMetaData.java
+++ 
b/infra/database/type/firebird/src/main/java/org/apache/shardingsphere/infra/database/firebird/metadata/database/FirebirdDatabaseMetaData.java
@@ -41,6 +41,11 @@ public final class FirebirdDatabaseMetaData implements 
DialectDatabaseMetaData {
         return tableNamePattern.toUpperCase();
     }
     
+    @Override
+    public boolean isDDLNeedImplicitCommit() {
+        return true;
+    }
+    
     @Override
     public String getDatabaseType() {
         return "Firebird";
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java
index 5071dc31653..bc384be2e74 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteExecutor.java
@@ -27,6 +27,8 @@ import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConne
 import 
org.apache.shardingsphere.driver.jdbc.core.resultset.ShardingSphereResultSet;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
@@ -43,10 +45,8 @@ import 
org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.metadata.refresher.MetaDataRefreshEngine;
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.firebird.FirebirdStatement;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
@@ -104,7 +104,7 @@ public final class DriverJDBCPushDownExecuteExecutor {
             processEngine.executeSQL(executionGroupContext, 
executionContext.getQueryContext());
             List<Boolean> results = jdbcExecutor.execute(executionGroupContext,
                     new 
ExecuteCallbackFactory(prepareEngine.getType()).newInstance(database, 
executeCallback, executionContext.getSqlStatementContext().getSqlStatement()));
-            if 
(isNeedImplicitCommit(executionContext.getQueryContext().getSqlStatementContext().getSqlStatement()))
 {
+            if 
(isNeedImplicitCommit(executionContext.getQueryContext().getSqlStatementContext()))
 {
                 connection.commit();
             }
             if 
(MetaDataRefreshEngine.isRefreshMetaDataRequired(executionContext.getSqlStatementContext()))
 {
@@ -125,10 +125,6 @@ public final class DriverJDBCPushDownExecuteExecutor {
         return result;
     }
     
-    private boolean isNeedImplicitCommit(final SQLStatement sqlStatement) {
-        return !connection.getAutoCommit() && sqlStatement instanceof 
DDLStatement && sqlStatement instanceof FirebirdStatement;
-    }
-    
     private Collection<List<Object>> getParameterSets(final 
ExecutionGroup<JDBCExecutionUnit> executionGroup) {
         Collection<List<Object>> result = new LinkedList<>();
         for (JDBCExecutionUnit each : executionGroup.getInputs()) {
@@ -137,6 +133,11 @@ public final class DriverJDBCPushDownExecuteExecutor {
         return result;
     }
     
+    private boolean isNeedImplicitCommit(final SQLStatementContext 
sqlStatementContext) {
+        DialectDatabaseMetaData dialectDatabaseMetaData = 
DatabaseTypedSPILoader.getService(DialectDatabaseMetaData.class, 
sqlStatementContext.getDatabaseType());
+        return !connection.getAutoCommit() && 
sqlStatementContext.getSqlStatement() instanceof DDLStatement && 
dialectDatabaseMetaData.isDDLNeedImplicitCommit();
+    }
+    
     /**
      * Get result set.
      *
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteUpdateExecutor.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteUpdateExecutor.java
index e865af16713..fc9de04fca4 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteUpdateExecutor.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/pushdown/jdbc/DriverJDBCPushDownExecuteUpdateExecutor.java
@@ -26,6 +26,8 @@ import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConne
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
@@ -41,9 +43,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.attribute.datanode.DataNodeRuleAttribute;
 import org.apache.shardingsphere.mode.metadata.refresher.MetaDataRefreshEngine;
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.firebird.FirebirdStatement;
 
 import java.sql.Connection;
 import java.sql.SQLException;
@@ -109,7 +109,7 @@ public final class DriverJDBCPushDownExecuteUpdateExecutor {
                     .newInstance(database, 
executionContext.getQueryContext().getSqlStatementContext().getSqlStatement(), 
updateCallback);
             List<Integer> updateCounts = 
jdbcExecutor.execute(executionGroupContext, callback);
             if 
(MetaDataRefreshEngine.isRefreshMetaDataRequired(executionContext.getQueryContext().getSqlStatementContext()))
 {
-                if 
(isNeedImplicitCommit(executionContext.getQueryContext().getSqlStatementContext().getSqlStatement()))
 {
+                if 
(isNeedImplicitCommit(executionContext.getQueryContext().getSqlStatementContext()))
 {
                     connection.commit();
                 }
                 new 
MetaDataRefreshEngine(connection.getContextManager().getPersistServiceFacade().getMetaDataManagerPersistService(),
 database, props)
@@ -129,10 +129,6 @@ public final class DriverJDBCPushDownExecuteUpdateExecutor 
{
         return result;
     }
     
-    private boolean isNeedImplicitCommit(final SQLStatement sqlStatement) {
-        return !connection.getAutoCommit() && sqlStatement instanceof 
DDLStatement && sqlStatement instanceof FirebirdStatement;
-    }
-    
     private Collection<List<Object>> getParameterSets(final 
ExecutionGroup<JDBCExecutionUnit> executionGroup) {
         Collection<List<Object>> result = new LinkedList<>();
         for (JDBCExecutionUnit each : executionGroup.getInputs()) {
@@ -141,6 +137,11 @@ public final class DriverJDBCPushDownExecuteUpdateExecutor 
{
         return result;
     }
     
+    private boolean isNeedImplicitCommit(final SQLStatementContext 
sqlStatementContext) {
+        DialectDatabaseMetaData dialectDatabaseMetaData = 
DatabaseTypedSPILoader.getService(DialectDatabaseMetaData.class, 
sqlStatementContext.getDatabaseType());
+        return !connection.getAutoCommit() && 
sqlStatementContext.getSqlStatement() instanceof DDLStatement && 
dialectDatabaseMetaData.isDDLNeedImplicitCommit();
+    }
+    
     private boolean isNeedAccumulate(final Collection<ShardingSphereRule> 
rules, final SQLStatementContext sqlStatementContext) {
         if (!(sqlStatementContext instanceof TableAvailable)) {
             return false;

Reply via email to