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;