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 bf50a55 `DROP DEFAULT SHARDING STRATEGY ` syntax adds `IF EXISTS`
keyword. (#15928)
bf50a55 is described below
commit bf50a5569450b1bd53fdc9d235f1224a6722521c
Author: lanchengx <[email protected]>
AuthorDate: Thu Mar 10 10:32:44 2022 +0800
`DROP DEFAULT SHARDING STRATEGY ` syntax adds `IF EXISTS` keyword. (#15928)
* `DROP DEFAULT SHARDING STRATEGY ` syntax adds `IF EXISTS` keyword.
* Remove else.
---
.../update/DropDefaultStrategyStatementUpdater.java | 14 ++++++++++++++
.../DropDefaultShardingStrategyStatementUpdaterTest.java | 6 ++++++
.../src/main/antlr4/imports/sharding/RDLStatement.g4 | 2 +-
.../parser/core/ShardingDistSQLStatementVisitor.java | 2 +-
.../statement/DropDefaultShardingStrategyStatement.java | 5 +++++
.../impl/DropDefaultShardingStrategyStatementAssert.java | 1 +
.../drop/DropDefaultShardingStrategyStatementTestCase.java | 4 ++--
.../src/main/resources/case/rdl/drop.xml | 2 ++
.../src/main/resources/sql/supported/rdl/drop.xml | 1 +
9 files changed, 33 insertions(+), 4 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultStrategyStatementUpdater.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultStrategyStatementUpdater.java
index a51000a..04aa71e 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultStrategyStatementUpdater.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultStrategyStatementUpdater.java
@@ -37,11 +37,17 @@ public final class DropDefaultStrategyStatementUpdater
implements RuleDefinition
public void checkSQLStatement(final ShardingSphereMetaData
shardingSphereMetaData, final DropDefaultShardingStrategyStatement sqlStatement,
final ShardingRuleConfiguration
currentRuleConfig) throws DistSQLException {
String schemaName = shardingSphereMetaData.getName();
+ if (!isExistRuleConfig(currentRuleConfig) &&
sqlStatement.isContainsExistClause()) {
+ return;
+ }
checkCurrentRuleConfiguration(schemaName, currentRuleConfig);
checkExist(schemaName, sqlStatement, currentRuleConfig);
}
private void checkExist(final String schemaName, final
DropDefaultShardingStrategyStatement sqlStatement, final
ShardingRuleConfiguration currentRuleConfig) throws DistSQLException {
+ if (sqlStatement.isContainsExistClause()) {
+ return;
+ }
Optional<ShardingStrategyConfiguration> strategyConfiguration =
getStrategyConfiguration(currentRuleConfig, sqlStatement.getDefaultType());
DistSQLException.predictionThrow(strategyConfiguration.isPresent(),
new RequiredRuleMissedException(String.format("Default
sharding %s strategy", sqlStatement.getDefaultType().toLowerCase()),
schemaName));
@@ -58,6 +64,14 @@ public final class DropDefaultStrategyStatementUpdater
implements RuleDefinition
}
@Override
+ public boolean hasAnyOneToBeDropped(final
DropDefaultShardingStrategyStatement sqlStatement, final
ShardingRuleConfiguration currentRuleConfig) {
+ if
(sqlStatement.getDefaultType().equalsIgnoreCase(ShardingStrategyLevelType.TABLE.name()))
{
+ return null != currentRuleConfig && null !=
currentRuleConfig.getDefaultTableShardingStrategy();
+ }
+ return null != currentRuleConfig && null !=
currentRuleConfig.getDefaultDatabaseShardingStrategy();
+ }
+
+ @Override
public boolean updateCurrentRuleConfiguration(final
DropDefaultShardingStrategyStatement sqlStatement, final
ShardingRuleConfiguration currentRuleConfig) {
if
(sqlStatement.getDefaultType().equalsIgnoreCase(ShardingStrategyLevelType.TABLE.name()))
{
currentRuleConfig.setDefaultTableShardingStrategy(null);
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropDefaultShardingStrategyStatementUpdaterTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropDefaultShardingStrategyStatementUpdaterTest.java
index 2cb4b16..c9fc949 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropDefaultShardingStrategyStatementUpdaterTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropDefaultShardingStrategyStatementUpdaterTest.java
@@ -50,6 +50,12 @@ public final class
DropDefaultShardingStrategyStatementUpdaterTest {
}
@Test
+ public void assertCheckSQLStatementWithIfExists() throws DistSQLException {
+ updater.checkSQLStatement(shardingSphereMetaData, new
DropDefaultShardingStrategyStatement(true, "table"), new
ShardingRuleConfiguration());
+ updater.checkSQLStatement(shardingSphereMetaData, new
DropDefaultShardingStrategyStatement(true, "table"), null);
+ }
+
+ @Test
public void assertUpdateCurrentRuleConfiguration() {
ShardingRuleConfiguration currentRuleConfig =
createCurrentRuleConfiguration();
updater.updateCurrentRuleConfiguration(createSQLStatement("Database"),
currentRuleConfig);
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RDLStatement.g4
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RDLStatement.g4
index 07b326a..759e526 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RDLStatement.g4
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/antlr4/imports/sharding/RDLStatement.g4
@@ -44,7 +44,7 @@ alterDefaultShardingStrategy
;
dropDefaultShardingStrategy
- : DROP DEFAULT SHARDING type=(DATABASE | TABLE) STRATEGY
+ : DROP DEFAULT SHARDING type=(DATABASE | TABLE) STRATEGY existsClause?
;
createShardingKeyGenerator
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index 14db13d..2a08765 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -261,7 +261,7 @@ public final class ShardingDistSQLStatementVisitor extends
ShardingDistSQLStatem
@Override
public ASTNode visitDropDefaultShardingStrategy(final
DropDefaultShardingStrategyContext ctx) {
- return new DropDefaultShardingStrategyStatement(new
IdentifierValue(ctx.type.getText()).getValue().toLowerCase());
+ return new DropDefaultShardingStrategyStatement(null !=
ctx.existsClause(), new
IdentifierValue(ctx.type.getText()).getValue().toLowerCase());
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropDefaultShardingStrategyStatement.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropDefaultShardingStrategyStatement.java
index 3f19f67..1de82c1 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropDefaultShardingStrategyStatement.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropDefaultShardingStrategyStatement.java
@@ -29,4 +29,9 @@ import
org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleState
public final class DropDefaultShardingStrategyStatement extends
DropRuleStatement {
private final String defaultType;
+
+ public DropDefaultShardingStrategyStatement(final boolean
containsExistClause, final String defaultType) {
+ setContainsExistClause(containsExistClause);
+ this.defaultType = defaultType;
+ }
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDefaultShardingStrategyStatementAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDefaultShardingStrategyStatementAssert.java
index 3c7c073..637c2c5 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDefaultShardingStrategyStatementAssert.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDefaultShardingStrategyStatementAssert.java
@@ -47,6 +47,7 @@ public final class DropDefaultShardingStrategyStatementAssert
{
} else {
assertNotNull(assertContext.getText("Actual statement should
exist."), actual);
assertThat(assertContext.getText("default sharding strategy
assertion error: "), actual.getDefaultType(), is(expected.getDefaultType()));
+ assertThat(assertContext.getText("default sharding strategy
assertion error: "), actual.isContainsExistClause(),
is(expected.isContainsExistClause()));
}
}
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDefaultShardingStrategyStatementTestCase.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDefaultShardingStrategyStatementTestCase.java
index b021935..58018ed 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDefaultShardingStrategyStatementTestCase.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDefaultShardingStrategyStatementTestCase.java
@@ -19,7 +19,7 @@ package
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
import lombok.Getter;
import lombok.Setter;
-import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.DropRuleStatementTestCase;
import javax.xml.bind.annotation.XmlAttribute;
@@ -28,7 +28,7 @@ import javax.xml.bind.annotation.XmlAttribute;
*/
@Getter
@Setter
-public final class DropDefaultShardingStrategyStatementTestCase extends
SQLParserTestCase {
+public final class DropDefaultShardingStrategyStatementTestCase extends
DropRuleStatementTestCase {
@XmlAttribute(name = "type")
private String defaultType;
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/drop.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/drop.xml
index a5aa52d..dbf7188 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/drop.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/drop.xml
@@ -143,6 +143,8 @@
</drop-sharding-key-generator>
<drop-default-sharding-strategy
sql-case-id="drop-default-sharding-strategy" type="table"/>
+
+ <drop-default-sharding-strategy
sql-case-id="drop-default-sharding-strategy-if-exists" type="table"
contains-exists-clause="true"/>
<drop-sharding-scaling-rule sql-case-id="drop-sharding-scaling-rule"
scaling-name="default_scaling"/>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/drop.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/drop.xml
index 3f36a76..cae1f38 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/drop.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/drop.xml
@@ -46,6 +46,7 @@
<distsql-case id="drop-sharding-key-generator" value="DROP SHARDING KEY
GENERATOR uuid_key_generator" />
<distsql-case id="drop-sharding-key-generator-if-exists" value="DROP
SHARDING KEY GENERATOR IF EXISTS uuid_key_generator" />
<distsql-case id="drop-default-sharding-strategy" value="DROP DEFAULT
SHARDING TABLE STRATEGY" />
+ <distsql-case id="drop-default-sharding-strategy-if-exists" value="DROP
DEFAULT SHARDING TABLE STRATEGY IF EXISTS" />
<distsql-case id="drop-sharding-scaling-rule" value="DROP SHARDING SCALING
RULE default_scaling" />
<distsql-case id="drop-sharding-scaling-rule-if-exists" value="DROP
SHARDING SCALING RULE IF EXISTS default_scaling" />
<distsql-case id="drop-sharding-algorithm" value="DROP SHARDING ALGORITHM
IF EXISTS t_order_hash_mod" />