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