This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 488341d331b Refactor DialectDatabaseMetaData.getGeneratedKeyOption as
optional (#37059)
488341d331b is described below
commit 488341d331ba6ed89c4c6f7efbad559768f4395d
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Nov 9 22:17:34 2025 +0800
Refactor DialectDatabaseMetaData.getGeneratedKeyOption as optional (#37059)
---
.../database/metadata/DialectDatabaseMetaData.java | 4 ++--
.../option/keygen/DialectGeneratedKeyOption.java | 17 -----------------
.../metadata/database/MariaDBDatabaseMetaData.java | 3 ++-
.../mysql/metadata/database/MySQLDatabaseMetaData.java | 5 +++--
.../core/statement/ShardingSpherePreparedStatement.java | 4 ++--
.../jdbc/core/statement/ShardingSphereStatement.java | 5 +++--
.../proxy/backend/connector/ProxySQLExecutor.java | 3 +--
.../connector/StandardDatabaseProxyConnector.java | 2 +-
8 files changed, 14 insertions(+), 29 deletions(-)
diff --git
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/metadata/DialectDatabaseMetaData.java
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/metadata/DialectDatabaseMetaData.java
index 0f6d8091a42..2bc58420072 100644
---
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/metadata/DialectDatabaseMetaData.java
+++
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/metadata/DialectDatabaseMetaData.java
@@ -156,8 +156,8 @@ public interface DialectDatabaseMetaData extends
DatabaseTypedSPI {
*
* @return generated key option
*/
- default DialectGeneratedKeyOption getGeneratedKeyOption() {
- return new DialectGeneratedKeyOption(false);
+ default Optional<DialectGeneratedKeyOption> getGeneratedKeyOption() {
+ return Optional.empty();
}
/**
diff --git
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/metadata/option/keygen/DialectGeneratedKeyOption.java
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/metadata/option/keygen/DialectGeneratedKeyOption.java
index 722d3d7ff0a..4b57de3917d 100644
---
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/metadata/option/keygen/DialectGeneratedKeyOption.java
+++
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/metadata/option/keygen/DialectGeneratedKeyOption.java
@@ -20,8 +20,6 @@ package
org.apache.shardingsphere.database.connector.core.metadata.database.meta
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import java.util.Optional;
-
/**
* Dialect generated key option.
*/
@@ -29,20 +27,5 @@ import java.util.Optional;
@Getter
public final class DialectGeneratedKeyOption {
- private final boolean isSupportReturnGeneratedKeys;
-
private final String columnName;
-
- public DialectGeneratedKeyOption(final boolean
isSupportReturnGeneratedKeys) {
- this(isSupportReturnGeneratedKeys, null);
- }
-
- /**
- * Get column name.
- *
- * @return column name
- */
- public Optional<String> getColumnName() {
- return Optional.ofNullable(columnName);
- }
}
diff --git
a/database/connector/dialect/mariadb/src/main/java/org/apache/shardingsphere/database/connector/mariadb/metadata/database/MariaDBDatabaseMetaData.java
b/database/connector/dialect/mariadb/src/main/java/org/apache/shardingsphere/database/connector/mariadb/metadata/database/MariaDBDatabaseMetaData.java
index 7975f27d59e..0274fd26a37 100644
---
a/database/connector/dialect/mariadb/src/main/java/org/apache/shardingsphere/database/connector/mariadb/metadata/database/MariaDBDatabaseMetaData.java
+++
b/database/connector/dialect/mariadb/src/main/java/org/apache/shardingsphere/database/connector/mariadb/metadata/database/MariaDBDatabaseMetaData.java
@@ -32,6 +32,7 @@ import
org.apache.shardingsphere.database.connector.mysql.metadata.database.MySQ
import java.sql.Connection;
import java.util.Collections;
+import java.util.Optional;
/**
* Database meta data of MariaDB.
@@ -81,7 +82,7 @@ public final class MariaDBDatabaseMetaData implements
DialectDatabaseMetaData {
}
@Override
- public DialectGeneratedKeyOption getGeneratedKeyOption() {
+ public Optional<DialectGeneratedKeyOption> getGeneratedKeyOption() {
return delegate.getGeneratedKeyOption();
}
diff --git
a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/database/MySQLDatabaseMetaData.java
b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/database/MySQLDatabaseMetaData.java
index 01af7c42014..a1626a5480e 100644
---
a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/database/MySQLDatabaseMetaData.java
+++
b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/database/MySQLDatabaseMetaData.java
@@ -32,6 +32,7 @@ import
org.apache.shardingsphere.database.connector.mysql.metadata.database.opti
import java.sql.Connection;
import java.util.Arrays;
+import java.util.Optional;
/**
* Database meta data of MySQL.
@@ -80,8 +81,8 @@ public final class MySQLDatabaseMetaData implements
DialectDatabaseMetaData {
}
@Override
- public DialectGeneratedKeyOption getGeneratedKeyOption() {
- return new DialectGeneratedKeyOption(true, "GENERATED_KEY");
+ public Optional<DialectGeneratedKeyOption> getGeneratedKeyOption() {
+ return Optional.of(new DialectGeneratedKeyOption("GENERATED_KEY"));
}
@Override
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 1f7ba866731..9a54939b0c9 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -312,8 +312,8 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
}
private String getGeneratedKeysColumnName(final String columnName) {
- DialectGeneratedKeyOption generatedKeyOption = new
DatabaseTypeRegistry(usedDatabase.getProtocolType()).getDialectDatabaseMetaData().getGeneratedKeyOption();
- return generatedKeyOption.getColumnName().orElse(columnName);
+ Optional<DialectGeneratedKeyOption> generatedKeyOption = new
DatabaseTypeRegistry(usedDatabase.getProtocolType()).getDialectDatabaseMetaData().getGeneratedKeyOption();
+ return generatedKeyOption.isPresent() ?
generatedKeyOption.get().getColumnName() : columnName;
}
@Override
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index d936a1df9de..f44cd8db5be 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -362,8 +362,9 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
}
private String getGeneratedKeysColumnName(final String columnName) {
- DialectGeneratedKeyOption generatedKeyOption = new
DatabaseTypeRegistry(metaData.getDatabase(usedDatabaseName).getProtocolType()).getDialectDatabaseMetaData().getGeneratedKeyOption();
- return generatedKeyOption.getColumnName().orElse(columnName);
+ Optional<DialectGeneratedKeyOption> generatedKeyOption =
+ new
DatabaseTypeRegistry(metaData.getDatabase(usedDatabaseName).getProtocolType()).getDialectDatabaseMetaData().getGeneratedKeyOption();
+ return generatedKeyOption.isPresent() ?
generatedKeyOption.get().getColumnName() : columnName;
}
@Override
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index bb4b86d09d8..ab53b6b9ee6 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -185,8 +185,7 @@ public final class ProxySQLExecutor {
int maxConnectionsSizePerQuery = ProxyContext.getInstance()
.getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
DialectDatabaseMetaData dialectDatabaseMetaData = new
DatabaseTypeRegistry(executionContext.getSqlStatementContext().getSqlStatement().getDatabaseType()).getDialectDatabaseMetaData();
- boolean isReturnGeneratedKeys =
executionContext.getSqlStatementContext().getSqlStatement() instanceof
InsertStatement
- &&
dialectDatabaseMetaData.getGeneratedKeyOption().isSupportReturnGeneratedKeys();
+ boolean isReturnGeneratedKeys =
executionContext.getSqlStatementContext().getSqlStatement() instanceof
InsertStatement && dialectDatabaseMetaData.getGeneratedKeyOption().isPresent();
return hasRawExecutionRule(rules)
? rawExecute(executionContext, rules,
maxConnectionsSizePerQuery)
: useDriverToExecute(executionContext, rules,
maxConnectionsSizePerQuery, isReturnGeneratedKeys,
SQLExecutorExceptionHandler.isExceptionThrown());
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
index e1d7575157c..c2b75957eb6 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
@@ -262,7 +262,7 @@ public final class StandardDatabaseProxyConnector
implements DatabaseProxyConnec
private ResultSet doExecuteFederation() throws SQLException {
SQLStatement sqlStatement =
queryContext.getSqlStatementContext().getSqlStatement();
DialectDatabaseMetaData dialectDatabaseMetaData = new
DatabaseTypeRegistry(sqlStatement.getDatabaseType()).getDialectDatabaseMetaData();
- boolean isReturnGeneratedKeys = sqlStatement instanceof
InsertStatement &&
dialectDatabaseMetaData.getGeneratedKeyOption().isSupportReturnGeneratedKeys();
+ boolean isReturnGeneratedKeys = sqlStatement instanceof
InsertStatement && dialectDatabaseMetaData.getGeneratedKeyOption().isPresent();
DatabaseType protocolType = database.getProtocolType();
ProxyJDBCExecutorCallback callback =
ProxyJDBCExecutorCallbackFactory.newInstance(driverType, protocolType,
database.getResourceMetaData(),
sqlStatement, this, isReturnGeneratedKeys,
SQLExecutorExceptionHandler.isExceptionThrown(), true);