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);

Reply via email to