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 7878021d364 Refactor ShardingRule.getKeyGenerateAlgorithm() (#30643)
7878021d364 is described below

commit 7878021d364c70a3310eae0e2bd0ae89240d5602
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Mar 25 22:22:08 2024 +0800

    Refactor ShardingRule.getKeyGenerateAlgorithm() (#30643)
---
 .../engine/InsertClauseShardingConditionEngine.java   |  2 +-
 .../shardingsphere/sharding/rule/ShardingRule.java    | 19 ++++++++-----------
 .../sharding/rule/ShardingRuleTest.java               |  7 +++----
 3 files changed, 12 insertions(+), 16 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
index fa1dc263120..92e59fb0ccf 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
@@ -176,7 +176,7 @@ public final class InsertClauseShardingConditionEngine {
                     .orElseGet(() -> new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName()));
             AlgorithmSQLContext algorithmSQLContext = new 
AlgorithmSQLContext(database.getName(), schemaName, tableName, 
generatedKey.get().getColumnName());
             
generatedKey.get().getGeneratedValues().addAll(shardingRule.generateKeys(algorithmSQLContext,
 sqlStatementContext.getValueListCount()));
-            
generatedKey.get().setSupportAutoIncrement(shardingRule.isSupportAutoIncrement(database.getName(),
 tableName));
+            
generatedKey.get().setSupportAutoIncrement(shardingRule.isSupportAutoIncrement(tableName));
             if 
(shardingRule.findShardingColumn(generatedKey.get().getColumnName(), 
tableName).isPresent()) {
                 appendGeneratedKeyCondition(generatedKey.get(), tableName, 
shardingConditions);
             }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index 8cd9a00326d..c653dd3dfb5 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -23,7 +23,6 @@ import com.google.common.base.Strings;
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContext;
 import 
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmInitializationException;
-import 
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmNotFoundOnTableException;
 import 
org.apache.shardingsphere.infra.algorithm.keygen.core.KeyGenerateAlgorithm;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
@@ -589,24 +588,22 @@ public final class ShardingRule implements DatabaseRule {
      * @return generated keys
      */
     public Collection<? extends Comparable<?>> generateKeys(final 
AlgorithmSQLContext algorithmSQLContext, final int keyGenerateCount) {
-        return getKeyGenerateAlgorithm(algorithmSQLContext.getDatabaseName(), 
algorithmSQLContext.getTableName()).generateKeys(algorithmSQLContext, 
keyGenerateCount);
-    }
-    
-    private KeyGenerateAlgorithm getKeyGenerateAlgorithm(final String 
databaseName, final String logicTableName) {
-        Optional<ShardingTable> shardingTable = 
findShardingTable(logicTableName);
-        ShardingSpherePreconditions.checkState(shardingTable.isPresent(), () 
-> new AlgorithmNotFoundOnTableException("key generator", databaseName, 
logicTableName));
-        return null == shardingTable.get().getKeyGeneratorName() ? 
defaultKeyGenerateAlgorithm : 
keyGenerators.get(shardingTable.get().getKeyGeneratorName());
+        return 
getKeyGenerateAlgorithm(algorithmSQLContext.getTableName()).generateKeys(algorithmSQLContext,
 keyGenerateCount);
     }
     
     /**
      * Judge whether support auto increment or not.
      * 
-     * @param databaseName database name
      * @param logicTableName logic table name
      * @return whether support auto increment or not
      */
-    public boolean isSupportAutoIncrement(final String databaseName, final 
String logicTableName) {
-        return getKeyGenerateAlgorithm(databaseName, 
logicTableName).isSupportAutoIncrement();
+    public boolean isSupportAutoIncrement(final String logicTableName) {
+        return 
getKeyGenerateAlgorithm(logicTableName).isSupportAutoIncrement();
+    }
+    
+    private KeyGenerateAlgorithm getKeyGenerateAlgorithm(final String 
logicTableName) {
+        ShardingTable shardingTable = getShardingTable(logicTableName);
+        return null == shardingTable.getKeyGeneratorName() ? 
defaultKeyGenerateAlgorithm : 
keyGenerators.get(shardingTable.getKeyGeneratorName());
     }
     
     /**
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
index 55c68d4856b..cb5366a2a95 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
@@ -21,7 +21,6 @@ import org.apache.groovy.util.Maps;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContext;
 import 
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmInitializationException;
-import 
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmNotFoundOnTableException;
 import 
org.apache.shardingsphere.infra.algorithm.keygen.snowflake.SnowflakeKeyGenerateAlgorithm;
 import 
org.apache.shardingsphere.infra.algorithm.keygen.uuid.UUIDKeyGenerateAlgorithm;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
@@ -336,7 +335,7 @@ class ShardingRuleTest {
     void assertGenerateKeyFailure() {
         AlgorithmSQLContext generateContext = mock(AlgorithmSQLContext.class);
         when(generateContext.getTableName()).thenReturn("table_0");
-        assertThrows(AlgorithmNotFoundOnTableException.class, () -> 
createMaximumShardingRule().generateKeys(generateContext, 1));
+        assertThrows(ShardingTableRuleNotFoundException.class, () -> 
createMaximumShardingRule().generateKeys(generateContext, 1));
     }
     
     @Test
@@ -806,7 +805,7 @@ class ShardingRuleTest {
     
     @Test
     void assertIsSupportAutoIncrement() {
-        assertFalse(createMaximumShardingRule().isSupportAutoIncrement("ds_0", 
"logic_table"));
-        assertTrue(createMaximumShardingRule().isSupportAutoIncrement("ds_0", 
"sub_logic_table"));
+        
assertFalse(createMaximumShardingRule().isSupportAutoIncrement("logic_table"));
+        
assertTrue(createMaximumShardingRule().isSupportAutoIncrement("sub_logic_table"));
     }
 }

Reply via email to