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

lanchengxiang 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 08f8807  Add IF EXISTS keyword to DROP KEY GENERATOR (#15771)
08f8807 is described below

commit 08f8807f275a3a08bc64ac9cc4ac821fd4651303
Author: liguoping <[email protected]>
AuthorDate: Mon Mar 7 13:08:42 2022 +0800

    Add IF EXISTS keyword to DROP KEY GENERATOR (#15771)
    
    * Add IF EXISTS keyword to DROP KEY GENERATOR
    
    * IfExistsStatementTestCase
    
    * fix ci
    
    * update
    
    * rename DropRuleStatementTestCase
---
 .../AdvancedDistSQLStatementParserEngine.java      |  3 +--
 .../DropShardingKeyGeneratorStatementUpdater.java  | 16 +++++++++++++--
 ...opShardingKeyGeneratorStatementUpdaterTest.java |  8 ++++++++
 .../main/antlr4/imports/sharding/RDLStatement.g4   |  2 +-
 .../core/ShardingDistSQLStatementVisitor.java      |  4 +++-
 .../distsql/rdl/drop/DropRuleStatementAssert.java  |  5 +++++
 .../impl/DropShardingAlgorithmStatementAssert.java |  2 +-
 ...> DropShardingKeyGeneratorStatementAssert.java} | 24 +++++++++++-----------
 ...estCase.java => DropRuleStatementTestCase.java} | 16 +++++----------
 .../DropShardingAlgorithmStatementTestCase.java    |  8 ++------
 .../DropShardingKeyGeneratorStatementTestCase.java |  4 ++--
 .../src/main/resources/case/rdl/drop.xml           |  4 ++++
 .../src/main/resources/sql/supported/rdl/drop.xml  |  1 +
 13 files changed, 59 insertions(+), 38 deletions(-)

diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/advanced/AdvancedDistSQLStatementParserEngine.java
 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/advanced/AdvancedDistSQLStatementParserEngine.java
index f8b3d41..b0fec83 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/advanced/AdvancedDistSQLStatementParserEngine.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/advanced/AdvancedDistSQLStatementParserEngine.java
@@ -43,8 +43,7 @@ public final class AdvancedDistSQLStatementParserEngine {
     
     private ASTNode parseToASTNode(final String sql) {
         try {
-            ASTNode result = SQLParserFactory.newInstance(sql, 
AdvancedDistSQLLexer.class, AdvancedDistSQLParser.class, false).parse();
-            return result;
+            return SQLParserFactory.newInstance(sql, 
AdvancedDistSQLLexer.class, AdvancedDistSQLParser.class, false).parse();
         } catch (final ParseCancellationException | SQLParsingException 
ignored) {
             throw new SQLParsingException("You have an error in your SQL 
syntax.");
         }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorStatementUpdater.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorStatementUpdater.java
index 8d7d369..001b421 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorStatementUpdater.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorStatementUpdater.java
@@ -45,10 +45,13 @@ public final class DropShardingKeyGeneratorStatementUpdater 
implements RuleDefin
     @Override
     public void checkSQLStatement(final ShardingSphereMetaData 
shardingSphereMetaData, final DropShardingKeyGeneratorStatement sqlStatement,
                                   final ShardingRuleConfiguration 
currentRuleConfig) throws DistSQLException {
+        if (null == currentRuleConfig && sqlStatement.isContainsExistClause()) 
{
+            return;
+        }
         String schemaName = shardingSphereMetaData.getName();
         Collection<String> keyGeneratorNames = new 
LinkedList<>(sqlStatement.getKeyGeneratorNames());
         checkDuplicate(schemaName, keyGeneratorNames);
-        checkExist(schemaName, keyGeneratorNames, currentRuleConfig);
+        checkExist(schemaName, keyGeneratorNames, currentRuleConfig, 
sqlStatement);
         checkInUsed(schemaName, keyGeneratorNames, currentRuleConfig);
     }
     
@@ -58,7 +61,11 @@ public final class DropShardingKeyGeneratorStatementUpdater 
implements RuleDefin
         DistSQLException.predictionThrow(duplicateNames.isEmpty(), new 
DuplicateKeyGeneratorException("sharding", schemaName, duplicateNames));
     }
     
-    private void checkExist(final String schemaName, final Collection<String> 
keyGeneratorNames, final ShardingRuleConfiguration currentRuleConfig) throws 
DistSQLException {
+    private void checkExist(final String schemaName, final Collection<String> 
keyGeneratorNames, final ShardingRuleConfiguration currentRuleConfig,
+                            final DropShardingKeyGeneratorStatement 
sqlStatement) throws DistSQLException {
+        if (sqlStatement.isContainsExistClause()) {
+            return;
+        }
         Collection<String> notExistKeyGenerators = 
keyGeneratorNames.stream().filter(each -> 
!currentRuleConfig.getKeyGenerators().containsKey(each)).collect(Collectors.toCollection(LinkedList::new));
         DistSQLException.predictionThrow(notExistKeyGenerators.isEmpty(), new 
RequiredKeyGeneratorMissedException("Sharding", schemaName, 
notExistKeyGenerators));
     }
@@ -95,4 +102,9 @@ public final class DropShardingKeyGeneratorStatementUpdater 
implements RuleDefin
         }
         return result;
     }
+    
+    @Override
+    public boolean hasAnyOneToBeDropped(final 
DropShardingKeyGeneratorStatement sqlStatement, final ShardingRuleConfiguration 
currentRuleConfig) {
+        return null != currentRuleConfig && 
!getIdenticalData(currentRuleConfig.getKeyGenerators().keySet(), 
sqlStatement.getKeyGeneratorNames()).isEmpty();
+    }
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingKeyGeneratorStatementUpdaterTest.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingKeyGeneratorStatementUpdaterTest.java
index 1bcb21e..29ee15b 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingKeyGeneratorStatementUpdaterTest.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingKeyGeneratorStatementUpdaterTest.java
@@ -35,6 +35,7 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Properties;
 
 import static org.junit.Assert.assertTrue;
@@ -64,6 +65,13 @@ public final class 
DropShardingKeyGeneratorStatementUpdaterTest {
     }
     
     @Test
+    public void assertExecuteWithNotExistWithIfExists() throws 
DistSQLException {
+        DropShardingKeyGeneratorStatement sqlStatement = new 
DropShardingKeyGeneratorStatement(Collections.singletonList("uuid_key_generator"));
+        sqlStatement.setContainsExistClause(true);
+        updater.checkSQLStatement(shardingSphereMetaData, sqlStatement, new 
ShardingRuleConfiguration());
+    }
+    
+    @Test
     public void assertDropSpecifiedKeyGenerator() {
         ShardingRuleConfiguration currentRuleConfig = new 
ShardingRuleConfiguration();
         currentRuleConfig.getKeyGenerators().put("uuid_key_generator", new 
ShardingSphereAlgorithmConfiguration("uuid", new Properties()));
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 a5e63f8..348bfe0 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
@@ -88,7 +88,7 @@ dropShardingAlgorithm
     ;
 
 dropShardingKeyGenerator
-    : DROP SHARDING KEY GENERATOR keyGeneratorName (COMMA keyGeneratorName)*
+    : DROP SHARDING KEY GENERATOR existsClause? keyGeneratorName (COMMA 
keyGeneratorName)*
     ;
 
 shardingTableRuleDefinition
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 474e9c1..3c5abc8 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
@@ -452,7 +452,9 @@ public final class ShardingDistSQLStatementVisitor extends 
ShardingDistSQLStatem
     
     @Override
     public ASTNode visitDropShardingKeyGenerator(final 
DropShardingKeyGeneratorContext ctx) {
-        return new 
DropShardingKeyGeneratorStatement(ctx.keyGeneratorName().stream().map(each -> 
getIdentifierValue(each)).collect(Collectors.toList()));
+        DropShardingKeyGeneratorStatement result = new 
DropShardingKeyGeneratorStatement(ctx.keyGeneratorName().stream().map(this::getIdentifierValue).collect(Collectors.toList()));
+        result.setContainsExistClause(null != ctx.existsClause());
+        return result;
     }
     
     @Override
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/DropRuleStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/DropRuleStatementAssert.java
index 66847a5..f15d15f 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/DropRuleStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/DropRuleStatementAssert.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.sharding.distsql.parser.statement.DropDefaultSh
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingAlgorithmStatement;
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingBindingTableRulesStatement;
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingBroadcastTableRulesStatement;
+import 
org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingKeyGeneratorStatement;
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingTableRuleStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.drop.impl.DropDatabaseDiscoveryHeartbeatStatementAssert;
@@ -45,6 +46,7 @@ import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.drop.impl.DropShardingAlgorithmStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.drop.impl.DropShardingBindingTableRulesStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.drop.impl.DropShardingBroadcastTableRulesStatementAssert;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.drop.impl.DropShardingKeyGeneratorStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.drop.impl.DropShardingScalingRuleStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.drop.impl.DropShardingTableRuleStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
@@ -59,6 +61,7 @@ import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropShardingAlgorithmStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropShardingBindingTableRulesStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropShardingBroadcastTableRulesStatementTestCase;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropShardingKeyGeneratorStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropShardingScalingRuleStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropShardingTableRuleStatementTestCase;
 
@@ -102,6 +105,8 @@ public final class DropRuleStatementAssert {
             DropShardingScalingRuleStatementAssert.assertIs(assertContext, 
(DropShardingScalingRuleStatement) actual, 
(DropShardingScalingRuleStatementTestCase) expected);
         } else if (actual instanceof DropShardingAlgorithmStatement) {
             DropShardingAlgorithmStatementAssert.assertIs(assertContext, 
(DropShardingAlgorithmStatement) actual, 
(DropShardingAlgorithmStatementTestCase) expected);
+        } else if (actual instanceof DropShardingKeyGeneratorStatement) {
+            DropShardingKeyGeneratorStatementAssert.assertIs(assertContext, 
(DropShardingKeyGeneratorStatement) actual, 
(DropShardingKeyGeneratorStatementTestCase) expected);
         }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingAlgorithmStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingAlgorithmStatementAssert.java
index c2f2165..c3ae092 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingAlgorithmStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingAlgorithmStatementAssert.java
@@ -45,7 +45,7 @@ public final class DropShardingAlgorithmStatementAssert {
             assertNull(assertContext.getText("Actual algorithm should not 
exist."), actual);
         } else {
             assertThat(assertContext.getText("Algorithm names assertion error: 
"), actual.getAlgorithmNames(), is(expected.getAlgorithms()));
-            assertThat(assertContext.getText("Contains exist clause assertion 
error: "), actual.isContainsExistClause(), 
is(expected.isContainsExistsClause()));
+            assertThat(assertContext.getText("Contains exist clause 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/asserts/statement/distsql/rdl/drop/impl/DropShardingAlgorithmStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingKeyGeneratorStatementAssert.java
similarity index 64%
copy from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingAlgorithmStatementAssert.java
copy to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingKeyGeneratorStatementAssert.java
index c2f2165..79cd54c 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingAlgorithmStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropShardingKeyGeneratorStatementAssert.java
@@ -19,33 +19,33 @@ package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingAlgorithmStatement;
+import 
org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingKeyGeneratorStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropShardingAlgorithmStatementTestCase;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropShardingKeyGeneratorStatementTestCase;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 
 /**
- * Drop sharding algorithm statement assert.
+ * Drop sharding key generator statement assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class DropShardingAlgorithmStatementAssert {
+public final class DropShardingKeyGeneratorStatementAssert {
     
     /**
-     * Assert drop sharding algorithm statement is correct with expected 
parser result.
+     * Assert drop sharding key generator statement is correct with expected 
parser result.
      *
      * @param assertContext assert context
-     * @param actual actual drop sharding algorithm statement
-     * @param expected expected drop sharding algorithm statement test case
+     * @param actual actual drop sharding key generator statement
+     * @param expected expected drop sharding key generator statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final DropShardingAlgorithmStatement actual, final 
DropShardingAlgorithmStatementTestCase expected) {
-        if (null == expected.getAlgorithms()) {
-            assertNull(assertContext.getText("Actual algorithm should not 
exist."), actual);
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final DropShardingKeyGeneratorStatement actual, final 
DropShardingKeyGeneratorStatementTestCase expected) {
+        if (null == expected.getKeyGeneratorName()) {
+            assertNull(assertContext.getText("Actual key generator name should 
not exist."), actual);
         } else {
-            assertThat(assertContext.getText("Algorithm names assertion error: 
"), actual.getAlgorithmNames(), is(expected.getAlgorithms()));
-            assertThat(assertContext.getText("Contains exist clause assertion 
error: "), actual.isContainsExistClause(), 
is(expected.isContainsExistsClause()));
+            assertThat(assertContext.getText("Key generator names assertion 
error: "), actual.getKeyGeneratorNames(), is(expected.getKeyGeneratorName()));
+            assertThat(assertContext.getText("Contains exist clause 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/DropShardingKeyGeneratorStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/DropRuleStatementTestCase.java
similarity index 63%
copy from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropShardingKeyGeneratorStatementTestCase.java
copy to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/DropRuleStatementTestCase.java
index 3f394e7..7d291f7 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropShardingKeyGeneratorStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/DropRuleStatementTestCase.java
@@ -15,21 +15,15 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop;
+package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement;
 
 import lombok.Getter;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
-import javax.xml.bind.annotation.XmlElement;
-import java.util.LinkedList;
-import java.util.List;
+import javax.xml.bind.annotation.XmlAttribute;
 
-/**
- * Drop sharding key generator statement test case.
- */
 @Getter
-public final class DropShardingKeyGeneratorStatementTestCase extends 
SQLParserTestCase {
+public abstract class DropRuleStatementTestCase extends SQLParserTestCase {
     
-    @XmlElement(name = "key-generator")
-    private final List<String> keyGeneratorName = new LinkedList<>();
+    @XmlAttribute(name = "contains-exists-clause")
+    private boolean containsExistClause;
 }
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/DropShardingAlgorithmStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropShardingAlgorithmStatementTestCase.java
index 531390e..0e84681 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropShardingAlgorithmStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropShardingAlgorithmStatementTestCase.java
@@ -19,9 +19,8 @@ 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;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -31,10 +30,7 @@ import java.util.List;
  */
 @Setter
 @Getter
-public final class DropShardingAlgorithmStatementTestCase extends 
SQLParserTestCase {
-    
-    @XmlAttribute(name = "contains-exists-clause")
-    private boolean containsExistsClause;
+public final class DropShardingAlgorithmStatementTestCase extends 
DropRuleStatementTestCase {
     
     @XmlElement(name = "algorithm")
     private final List<String> algorithms = new LinkedList<>();
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/DropShardingKeyGeneratorStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropShardingKeyGeneratorStatementTestCase.java
index 3f394e7..cf028cf 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropShardingKeyGeneratorStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropShardingKeyGeneratorStatementTestCase.java
@@ -18,7 +18,7 @@
 package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop;
 
 import lombok.Getter;
-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.XmlElement;
 import java.util.LinkedList;
@@ -28,7 +28,7 @@ import java.util.List;
  * Drop sharding key generator statement test case.
  */
 @Getter
-public final class DropShardingKeyGeneratorStatementTestCase extends 
SQLParserTestCase {
+public final class DropShardingKeyGeneratorStatementTestCase extends 
DropRuleStatementTestCase {
     
     @XmlElement(name = "key-generator")
     private final List<String> keyGeneratorName = new LinkedList<>();
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 5467b0c..64adc6c 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
@@ -111,6 +111,10 @@
     <drop-sharding-key-generator sql-case-id="drop-sharding-key-generator" >
         <key-generator>uuid_key_generator</key-generator>
     </drop-sharding-key-generator>
+
+    <drop-sharding-key-generator 
sql-case-id="drop-sharding-key-generator-if-exists" 
contains-exists-clause="true">
+        <key-generator>uuid_key_generator</key-generator>
+    </drop-sharding-key-generator>
     
     <drop-default-sharding-strategy 
sql-case-id="drop-default-sharding-strategy" type="table"/>
 
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 72fdd81..e3f7cbf 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
@@ -39,6 +39,7 @@
     <distsql-case id="drop-default-single-table" value="DROP DEFAULT SINGLE 
TABLE RULE" />
     <distsql-case id="drop-default-single-table-if-exists" value="DROP DEFAULT 
SINGLE TABLE RULE IF EXISTS" />
     <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-sharding-scaling-rule" value="DROP SHARDING SCALING 
RULE default_scaling" />
     <distsql-case id="drop-sharding-algorithm" value="DROP SHARDING ALGORITHM 
IF EXISTS t_order_hash_mod" />

Reply via email to