This is an automated email from the ASF dual-hosted git repository.

jianglongtao 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 d9176db27b2 Make ALTER DEFAULT SHARDING STRATEGY support 
`NoneShardingStrategy` TYPE (#24153)
d9176db27b2 is described below

commit d9176db27b2ee407b476e89c9ac84b115b0d63e2
Author: Zichao <[email protected]>
AuthorDate: Tue Feb 14 14:04:06 2023 +0800

    Make ALTER DEFAULT SHARDING STRATEGY support `NoneShardingStrategy` TYPE 
(#24153)
---
 ...terDefaultShardingStrategyStatementUpdater.java | 19 ++++++++++-----
 ...efaultShardingStrategyStatementUpdaterTest.java | 28 ++++++++++++++++++++++
 .../core/ShardingDistSQLStatementVisitor.java      |  3 +++
 3 files changed, 44 insertions(+), 6 deletions(-)

diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterDefaultShardingStrategyStatementUpdater.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterDefaultShardingStrategyStatementUpdater.java
index 53062ca4999..87a3fb27e00 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterDefaultShardingStrategyStatementUpdater.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterDefaultShardingStrategyStatementUpdater.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.distsql.handler.update.RuleDefinitionAlterUpdat
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.distsql.handler.converter.ShardingTableRuleStatementConverter;
 import 
org.apache.shardingsphere.sharding.distsql.handler.enums.ShardingStrategyLevelType;
@@ -43,7 +44,9 @@ public final class 
AlterDefaultShardingStrategyStatementUpdater implements RuleD
     public void checkSQLStatement(final ShardingSphereDatabase database, final 
AlterDefaultShardingStrategyStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
         String databaseName = database.getName();
         checkCurrentRuleConfiguration(databaseName, currentRuleConfig);
-        checkAlgorithm(databaseName, currentRuleConfig, sqlStatement);
+        if (!"none".equalsIgnoreCase(sqlStatement.getStrategyType())) {
+            checkAlgorithm(sqlStatement);
+        }
         checkExist(databaseName, sqlStatement, currentRuleConfig);
     }
     
@@ -51,7 +54,7 @@ public final class 
AlterDefaultShardingStrategyStatementUpdater implements RuleD
         ShardingSpherePreconditions.checkNotNull(currentRuleConfig, () -> new 
MissingRequiredRuleException("Sharding", databaseName));
     }
     
-    private void checkAlgorithm(final String databaseName, final 
ShardingRuleConfiguration currentRuleConfig, final 
AlterDefaultShardingStrategyStatement sqlStatement) {
+    private void checkAlgorithm(final AlterDefaultShardingStrategyStatement 
sqlStatement) {
         
ShardingSpherePreconditions.checkState(ShardingStrategyType.contains(sqlStatement.getStrategyType()),
 () -> new 
InvalidAlgorithmConfigurationException(sqlStatement.getStrategyType()));
         
ShardingSpherePreconditions.checkState(ShardingStrategyType.getValueOf(sqlStatement.getStrategyType()).isValid(sqlStatement.getShardingColumn()),
                 () -> new 
InvalidAlgorithmConfigurationException(sqlStatement.getStrategyType()));
@@ -78,10 +81,14 @@ public final class 
AlterDefaultShardingStrategyStatementUpdater implements RuleD
     @Override
     public ShardingRuleConfiguration buildToBeAlteredRuleConfiguration(final 
AlterDefaultShardingStrategyStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
-        String shardingAlgorithmName = getShardingAlgorithmName(sqlStatement, 
result);
-        ShardingStrategyConfiguration strategyConfig = 
ShardingTableRuleStatementConverter.createStrategyConfiguration(
-                sqlStatement.getStrategyType(), 
sqlStatement.getShardingColumn(), shardingAlgorithmName);
-        setStrategyConfiguration(result, sqlStatement.getDefaultType(), 
strategyConfig);
+        if ("none".equalsIgnoreCase(sqlStatement.getStrategyType())) {
+            setStrategyConfiguration(result, sqlStatement.getDefaultType(), 
new NoneShardingStrategyConfiguration());
+        } else {
+            String shardingAlgorithmName = 
getShardingAlgorithmName(sqlStatement, result);
+            ShardingStrategyConfiguration strategyConfig = 
ShardingTableRuleStatementConverter.createStrategyConfiguration(
+                    sqlStatement.getStrategyType(), 
sqlStatement.getShardingColumn(), shardingAlgorithmName);
+            setStrategyConfiguration(result, sqlStatement.getDefaultType(), 
strategyConfig);
+        }
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterDefaultShardingStrategyStatementUpdaterTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterDefaultShardingStrategyStatementUpdaterTest.java
index 1716f922836..e43932982bb 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterDefaultShardingStrategyStatementUpdaterTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterDefaultShardingStrategyStatementUpdaterTest.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.distsql.handler.exception.rule.MissingRequiredR
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.distsql.handler.update.AlterDefaultShardingStrategyStatementUpdater;
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.AlterDefaultShardingStrategyStatement;
@@ -111,4 +112,31 @@ public final class 
AlterDefaultShardingStrategyStatementUpdaterTest {
         assertThat(defaultDatabaseShardingStrategy.getShardingAlgorithmName(), 
is("default_database_inline"));
         assertThat(defaultDatabaseShardingStrategy.getShardingColumn(), 
is("user_id"));
     }
+    
+    @Test
+    public void 
assertAlterDefaultTableShardingStrategyWithNoneShardingStrategyType() {
+        AlterDefaultShardingStrategyStatement statement = new 
AlterDefaultShardingStrategyStatement("TABLE", "none", null, null);
+        ShardingRuleConfiguration currentRuleConfig = new 
ShardingRuleConfiguration();
+        currentRuleConfig.setDefaultTableShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "orderAlgorithm"));
+        currentRuleConfig.getShardingAlgorithms().put("order_id_algorithm", 
null);
+        updater.checkSQLStatement(database, statement, currentRuleConfig);
+        ShardingRuleConfiguration toBeAlteredRuleConfig = 
updater.buildToBeAlteredRuleConfiguration(statement);
+        updater.updateCurrentRuleConfiguration(currentRuleConfig, 
toBeAlteredRuleConfig);
+        NoneShardingStrategyConfiguration defaultTableShardingStrategy = 
(NoneShardingStrategyConfiguration) 
currentRuleConfig.getDefaultTableShardingStrategy();
+        assertThat(defaultTableShardingStrategy.getType(), is(""));
+        assertThat(defaultTableShardingStrategy.getShardingAlgorithmName(), 
is(""));
+    }
+    
+    @Test
+    public void 
assertAlterDefaultDatabaseShardingStrategyWithNoneShardingStrategyType() {
+        AlterDefaultShardingStrategyStatement statement = new 
AlterDefaultShardingStrategyStatement("DATABASE", "none", null, null);
+        ShardingRuleConfiguration currentRuleConfig = new 
ShardingRuleConfiguration();
+        currentRuleConfig.setDefaultDatabaseShardingStrategy(new 
StandardShardingStrategyConfiguration("order_id", "orderAlgorithm"));
+        updater.checkSQLStatement(database, statement, currentRuleConfig);
+        ShardingRuleConfiguration toBeAlteredRuleConfig = 
updater.buildToBeAlteredRuleConfiguration(statement);
+        updater.updateCurrentRuleConfiguration(currentRuleConfig, 
toBeAlteredRuleConfig);
+        NoneShardingStrategyConfiguration defaultDatabaseShardingStrategy = 
(NoneShardingStrategyConfiguration) 
currentRuleConfig.getDefaultDatabaseShardingStrategy();
+        assertThat(defaultDatabaseShardingStrategy.getType(), is(""));
+        assertThat(defaultDatabaseShardingStrategy.getShardingAlgorithmName(), 
is(""));
+    }
 }
diff --git 
a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
 
b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index 0c1c0d155c3..fc32fd215fd 100644
--- 
a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++ 
b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -226,6 +226,9 @@ public final class ShardingDistSQLStatementVisitor extends 
ShardingDistSQLStatem
     public ASTNode visitAlterDefaultShardingStrategy(final 
AlterDefaultShardingStrategyContext ctx) {
         String defaultType = new 
IdentifierValue(ctx.type.getText()).getValue();
         String strategyType = 
getIdentifierValue(ctx.shardingStrategy().strategyType());
+        if ("none".equalsIgnoreCase(strategyType)) {
+            return new AlterDefaultShardingStrategyStatement(defaultType, 
"none", null, null);
+        }
         String shardingColumn = 
buildShardingColumn(ctx.shardingStrategy().shardingColumnDefinition());
         AlgorithmSegment algorithmSegment = null == 
ctx.shardingStrategy().shardingAlgorithm().algorithmDefinition()
                 ? null

Reply via email to