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