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

menghaoran 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 69df4dc  Add `IF EXISTS` keyword to `DROP DB_DISCOVERY HEARBEAT`. 
(#15982)
69df4dc is described below

commit 69df4dcdd94a28c962f47d518d27ccd3667c9cf1
Author: yx9o <[email protected]>
AuthorDate: Fri Mar 11 23:25:04 2022 +0800

    Add `IF EXISTS` keyword to `DROP DB_DISCOVERY HEARBEAT`. (#15982)
    
    * Add IF EXISTS keyword to DROP DB_DISCOVERY HEARBEAT.
    
    * Update.
---
 ...DatabaseDiscoveryHeartbeatStatementUpdater.java | 19 +++++++++++-----
 .../DropDatabaseDiscoveryTypeStatementUpdater.java |  4 +---
 ...baseDiscoveryHeartbeatStatementUpdaterTest.java | 26 ++++++++++++++++------
 ...pDatabaseDiscoveryTypeStatementUpdaterTest.java |  2 ++
 .../antlr4/imports/db-discovery/RDLStatement.g4    | 18 +++++++--------
 .../DatabaseDiscoveryDistSQLStatementVisitor.java  |  3 ++-
 .../DropDatabaseDiscoveryHeartbeatStatement.java   |  5 +++++
 ...pDatabaseDiscoveryHeartbeatStatementAssert.java |  1 +
 ...ataBaseDiscoveryHeartbeatStatementTestCase.java |  4 ++++
 .../src/main/resources/case/rdl/drop.xml           |  5 +++++
 .../src/main/resources/sql/supported/rdl/drop.xml  |  1 +
 11 files changed, 63 insertions(+), 25 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryHeartbeatStatementUpdater.java
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabase
 [...]
index 3546ebe..98b7fc1 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryHeartbeatStatementUpdater.java
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryHeartbeatStatementUpdater.java
@@ -34,19 +34,23 @@ import java.util.stream.Collectors;
  */
 public final class DropDatabaseDiscoveryHeartbeatStatementUpdater implements 
RuleDefinitionDropUpdater<DropDatabaseDiscoveryHeartbeatStatement, 
DatabaseDiscoveryRuleConfiguration> {
     
-    private static final String RULE_TYPE = "database discovery";
+    private static final String RULE_TYPE = "Database discovery";
     
     @Override
-    public void checkSQLStatement(final ShardingSphereMetaData 
shardingSphereMetaData, final DropDatabaseDiscoveryHeartbeatStatement 
sqlStatement, 
+    public void checkSQLStatement(final ShardingSphereMetaData 
shardingSphereMetaData, final DropDatabaseDiscoveryHeartbeatStatement 
sqlStatement,
                                   final DatabaseDiscoveryRuleConfiguration 
currentRuleConfig) throws DistSQLException {
         String schemaName = shardingSphereMetaData.getName();
-        checkCurrentRuleConfiguration(schemaName, currentRuleConfig);
-        checkIsExist(schemaName, sqlStatement, currentRuleConfig);
+        checkCurrentRuleConfiguration(schemaName, sqlStatement, 
currentRuleConfig);
         checkIsInUse(schemaName, sqlStatement, currentRuleConfig);
     }
     
-    private void checkCurrentRuleConfiguration(final String schemaName, final 
DatabaseDiscoveryRuleConfiguration currentRuleConfig) throws DistSQLException {
+    private void checkCurrentRuleConfiguration(final String schemaName, final 
DropDatabaseDiscoveryHeartbeatStatement sqlStatement,
+                                               final 
DatabaseDiscoveryRuleConfiguration currentRuleConfig) throws DistSQLException {
+        if (sqlStatement.isContainsExistClause()) {
+            return;
+        }
         DistSQLException.predictionThrow(null != currentRuleConfig, () -> new 
RequiredRuleMissedException(RULE_TYPE, schemaName));
+        checkIsExist(schemaName, sqlStatement, currentRuleConfig);
     }
     
     private void checkIsExist(final String schemaName, final 
DropDatabaseDiscoveryHeartbeatStatement sqlStatement,
@@ -76,6 +80,11 @@ public final class 
DropDatabaseDiscoveryHeartbeatStatementUpdater implements Rul
     }
     
     @Override
+    public boolean hasAnyOneToBeDropped(final 
DropDatabaseDiscoveryHeartbeatStatement sqlStatement, final 
DatabaseDiscoveryRuleConfiguration currentRuleConfig) {
+        return isExistRuleConfig(currentRuleConfig) && 
!getIdenticalData(currentRuleConfig.getDiscoveryHeartbeats().keySet(), 
sqlStatement.getHeartbeatNames()).isEmpty();
+    }
+    
+    @Override
     public Class<DatabaseDiscoveryRuleConfiguration> 
getRuleConfigurationClass() {
         return DatabaseDiscoveryRuleConfiguration.class;
     }
diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryTypeStatementUpdater.java
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDisco
 [...]
index 6883065..5e03a27 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryTypeStatementUpdater.java
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryTypeStatementUpdater.java
@@ -83,9 +83,7 @@ public final class DropDatabaseDiscoveryTypeStatementUpdater 
implements RuleDefi
     
     @Override
     public boolean hasAnyOneToBeDropped(final 
DropDatabaseDiscoveryTypeStatement sqlStatement, final 
DatabaseDiscoveryRuleConfiguration currentRuleConfig) {
-        return isExistRuleConfig(currentRuleConfig)
-                && 
!getIdenticalData(currentRuleConfig.getDataSources().stream().map(DatabaseDiscoveryDataSourceRuleConfiguration::getDiscoveryTypeName).collect(Collectors.toSet()),
-                sqlStatement.getTypes()).isEmpty();
+        return isExistRuleConfig(currentRuleConfig) && 
!getIdenticalData(currentRuleConfig.getDiscoveryTypes().keySet(), 
sqlStatement.getTypes()).isEmpty();
     }
     
     private boolean isNotInUse(final DatabaseDiscoveryRuleConfiguration 
currentRuleConfig, final String toBeDroppedDiscoveryTypeName) {
diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryHeartbeatStatementUpdaterTest.java
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropData
 [...]
index a8e92da..c7d1a0d 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryHeartbeatStatementUpdaterTest.java
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryHeartbeatStatementUpdaterTest.java
@@ -21,7 +21,6 @@ import 
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleCon
 import 
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
 import 
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHeartBeatConfiguration;
 import 
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.DropDatabaseDiscoveryHeartbeatStatement;
-import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
 import 
org.apache.shardingsphere.infra.distsql.exception.rule.RequiredRuleMissedException;
 import 
org.apache.shardingsphere.infra.distsql.exception.rule.RuleInUsedException;
@@ -36,7 +35,9 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -60,7 +61,7 @@ public final class 
DropDatabaseDiscoveryHeartbeatStatementUpdaterTest {
     @Test(expected = RuleInUsedException.class)
     public void assertCheckSQLStatementWithInUsed() throws DistSQLException {
         DatabaseDiscoveryDataSourceRuleConfiguration configuration = new 
DatabaseDiscoveryDataSourceRuleConfiguration("name", Collections.emptyList(), 
"heartbeat_name", "");
-        updater.checkSQLStatement(shardingSphereMetaData, 
createSQLStatement(), new 
DatabaseDiscoveryRuleConfiguration(Collections.singletonList(configuration), 
+        updater.checkSQLStatement(shardingSphereMetaData, 
createSQLStatement(), new 
DatabaseDiscoveryRuleConfiguration(Collections.singletonList(configuration),
                 Collections.singletonMap("heartbeat_name", null), 
Collections.emptyMap()));
     }
     
@@ -69,19 +70,30 @@ public final class 
DropDatabaseDiscoveryHeartbeatStatementUpdaterTest {
         DatabaseDiscoveryRuleConfiguration databaseDiscoveryRuleConfiguration 
= createCurrentRuleConfiguration();
         updater.updateCurrentRuleConfiguration(createSQLStatement(), 
databaseDiscoveryRuleConfiguration);
         
assertFalse(databaseDiscoveryRuleConfiguration.getDiscoveryHeartbeats().containsKey("heartbeat_name"));
-        
assertTrue(databaseDiscoveryRuleConfiguration.getDiscoveryTypes().containsKey("type_name"));
+    }
+    
+    @Test
+    public void assertUpdateCurrentRuleConfigurationWithIfExists() throws 
DistSQLException {
+        DatabaseDiscoveryRuleConfiguration databaseDiscoveryRuleConfiguration 
= createCurrentRuleConfiguration();
+        DropDatabaseDiscoveryHeartbeatStatement 
dropDatabaseDiscoveryHeartbeatStatement = createSQLStatementWithIfExists();
+        updater.checkSQLStatement(shardingSphereMetaData, 
dropDatabaseDiscoveryHeartbeatStatement, databaseDiscoveryRuleConfiguration);
+        
assertFalse(updater.updateCurrentRuleConfiguration(dropDatabaseDiscoveryHeartbeatStatement,
 databaseDiscoveryRuleConfiguration));
+        
assertTrue(databaseDiscoveryRuleConfiguration.getDiscoveryHeartbeats().containsKey("heartbeat_name"));
+        
assertThat(databaseDiscoveryRuleConfiguration.getDiscoveryHeartbeats().size(), 
is(2));
     }
     
     private DropDatabaseDiscoveryHeartbeatStatement createSQLStatement() {
         return new 
DropDatabaseDiscoveryHeartbeatStatement(Collections.singleton("heartbeat_name"));
     }
     
+    private DropDatabaseDiscoveryHeartbeatStatement 
createSQLStatementWithIfExists() {
+        return new 
DropDatabaseDiscoveryHeartbeatStatement(Collections.singleton("heartbeat_name_0"),
 true);
+    }
+    
     private DatabaseDiscoveryRuleConfiguration 
createCurrentRuleConfiguration() {
-        Map<String, ShardingSphereAlgorithmConfiguration> discoveryTypes = new 
HashMap<>(1, 1);
-        discoveryTypes.put("type_name", new 
ShardingSphereAlgorithmConfiguration("MGR", new Properties()));
-        Map<String, DatabaseDiscoveryHeartBeatConfiguration> 
discoveryHeartbeat = new HashMap<>(1, 1);
+        Map<String, DatabaseDiscoveryHeartBeatConfiguration> 
discoveryHeartbeat = new HashMap<>(2, 1);
         discoveryHeartbeat.put("heartbeat_name", new 
DatabaseDiscoveryHeartBeatConfiguration(new Properties()));
         discoveryHeartbeat.put("other", new 
DatabaseDiscoveryHeartBeatConfiguration(new Properties()));
-        return new DatabaseDiscoveryRuleConfiguration(Collections.emptyList(), 
discoveryHeartbeat, discoveryTypes);
+        return new DatabaseDiscoveryRuleConfiguration(Collections.emptyList(), 
discoveryHeartbeat, Collections.emptyMap());
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryTypeStatementUpdaterTest.java
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseD
 [...]
index 4746632..e3f57a8 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryTypeStatementUpdaterTest.java
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/update/DropDatabaseDiscoveryTypeStatementUpdaterTest.java
@@ -38,6 +38,7 @@ import java.util.Properties;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 
 @RunWith(MockitoJUnitRunner.class)
 public final class DropDatabaseDiscoveryTypeStatementUpdaterTest {
@@ -77,6 +78,7 @@ public final class 
DropDatabaseDiscoveryTypeStatementUpdaterTest {
         DropDatabaseDiscoveryTypeStatement dropDatabaseDiscoveryRuleStatement 
= createSQLStatementWithIfExists();
         updater.checkSQLStatement(shardingSphereMetaData, 
dropDatabaseDiscoveryRuleStatement, databaseDiscoveryRuleConfiguration);
         
assertFalse(updater.updateCurrentRuleConfiguration(dropDatabaseDiscoveryRuleStatement,
 databaseDiscoveryRuleConfiguration));
+        
assertTrue(databaseDiscoveryRuleConfiguration.getDiscoveryTypes().containsKey("type_name"));
         
assertThat(databaseDiscoveryRuleConfiguration.getDiscoveryTypes().size(), 
is(2));
     }
     
diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/antlr4/imports/db-discovery/RDLStatement.g4
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/antlr4/imports/db-discovery/RDLStatement.g4
index 48e6682..c148c4d 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/antlr4/imports/db-discovery/RDLStatement.g4
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/antlr4/imports/db-discovery/RDLStatement.g4
@@ -35,6 +35,14 @@ createDatabaseDiscoveryType
     : CREATE DB_DISCOVERY TYPE databaseDiscoveryTypeDefinition (COMMA 
databaseDiscoveryTypeDefinition)*
     ;
 
+alterDatabaseDiscoveryType
+    : ALTER DB_DISCOVERY TYPE databaseDiscoveryTypeDefinition (COMMA 
databaseDiscoveryTypeDefinition)*
+    ;
+
+dropDatabaseDiscoveryType
+    : DROP DB_DISCOVERY TYPE existClause? discoveryTypeName (COMMA 
discoveryTypeName)*
+    ;
+
 createDatabaseDiscoveryHeartbeat
     : CREATE DB_DISCOVERY HEARTBEAT heartbeatDefinition (COMMA 
heartbeatDefinition)*
     ;
@@ -43,16 +51,8 @@ alterDatabaseDiscoveryHeartbeat
     : ALTER DB_DISCOVERY HEARTBEAT heartbeatDefinition (COMMA 
heartbeatDefinition)*
     ;
 
-dropDatabaseDiscoveryType
-    : DROP DB_DISCOVERY TYPE existClause? discoveryTypeName (COMMA 
discoveryTypeName)*
-    ;
-
 dropDatabaseDiscoveryHeartbeat
-    : DROP DB_DISCOVERY HEARTBEAT discoveryHeartbeatName (COMMA 
discoveryHeartbeatName)*
-    ;
-
-alterDatabaseDiscoveryType
-    : ALTER DB_DISCOVERY TYPE databaseDiscoveryTypeDefinition (COMMA 
databaseDiscoveryTypeDefinition)*
+    : DROP DB_DISCOVERY HEARTBEAT existClause? discoveryHeartbeatName (COMMA 
discoveryHeartbeatName)*
     ;
 
 databaseDiscoveryRule
diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/core/DatabaseDiscoveryDistSQLStatementVisitor.java
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/core/DatabaseDiscoveryDistSQLSt
 [...]
index 19fc73f..4686a54 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/core/DatabaseDiscoveryDistSQLStatementVisitor.java
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/core/DatabaseDiscoveryDistSQLStatementVisitor.java
@@ -188,7 +188,8 @@ public final class DatabaseDiscoveryDistSQLStatementVisitor 
extends DatabaseDisc
     
     @Override
     public ASTNode visitDropDatabaseDiscoveryHeartbeat(final 
DropDatabaseDiscoveryHeartbeatContext ctx) {
-        return new 
DropDatabaseDiscoveryHeartbeatStatement(ctx.discoveryHeartbeatName().stream().map(this::getIdentifierValue).collect(Collectors.toCollection(LinkedList::new)));
+        return new 
DropDatabaseDiscoveryHeartbeatStatement(ctx.discoveryHeartbeatName().stream().map(this::getIdentifierValue).collect(Collectors.toCollection(LinkedList::new)),
+                null != ctx.existClause());
     }
     
     private Properties getProperties(final PropertiesContext ctx) {
diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabas
 [...]
index 1148a02..3a220d0 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java
@@ -31,4 +31,9 @@ import java.util.Collection;
 public final class DropDatabaseDiscoveryHeartbeatStatement extends 
DropRuleStatement {
     
     private final Collection<String> heartbeatNames;
+    
+    public DropDatabaseDiscoveryHeartbeatStatement(final Collection<String> 
heartbeatNames, final boolean containsExistClause) {
+        setContainsExistClause(containsExistClause);
+        this.heartbeatNames = heartbeatNames;
+    }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDatabaseDiscoveryHeartbeatStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDatabaseDiscoveryHeartbeatStatementAssert.java
index 8f3785e..5e59176 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDatabaseDiscoveryHeartbeatStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDatabaseDiscoveryHeartbeatStatementAssert.java
@@ -47,6 +47,7 @@ public final class 
DropDatabaseDiscoveryHeartbeatStatementAssert {
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
             assertThat(assertContext.getText("database discovery heartbeat 
assertion error: "), actual.getHeartbeatNames(), is(expected.getHeartbeats()));
+            assertThat(assertContext.getText("database discovery heartbeat 
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/DropDataBaseDiscoveryHeartbeatStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDataBaseDiscoveryHeartbeatStatementTestCase.java
index 54a7444..7c6ad6c 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDataBaseDiscoveryHeartbeatStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDataBaseDiscoveryHeartbeatStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -34,4 +35,7 @@ public final class 
DropDataBaseDiscoveryHeartbeatStatementTestCase extends SQLPa
     
     @XmlElement(name = "heartbeat")
     private final List<String> heartbeats = new LinkedList<>();
+    
+    @XmlAttribute(name = "contains-exist-clause")
+    private boolean containsExistClause;
 }
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 4dcd690..0cb9f96 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
@@ -100,6 +100,11 @@
         <heartbeat>heartbeat_name_1</heartbeat>
     </drop-database-discovery-heartbeat>
     
+    <drop-database-discovery-heartbeat 
sql-case-id="drop-database-discovery-heartbeat-if-exists" 
contains-exist-clause="true">
+        <heartbeat>heartbeat_name_0</heartbeat>
+        <heartbeat>heartbeat_name_1</heartbeat>
+    </drop-database-discovery-heartbeat>
+    
     <drop-encrypt-rule sql-case-id="drop-encrypt-rule">
         <table>t_encrypt</table>
         <table>t_encrypt_order</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 3ac3072..1191a05 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
@@ -35,6 +35,7 @@
     <distsql-case id="drop-database-discovery-type" value="DROP DB_DISCOVERY 
TYPE type_name_0,type_name_1" />
     <distsql-case id="drop-database-discovery-type-if-exists" value="DROP 
DB_DISCOVERY TYPE IF EXISTS type_name_0,type_name_1" />
     <distsql-case id="drop-database-discovery-heartbeat" value="DROP 
DB_DISCOVERY HEARTBEAT heartbeat_name_0,heartbeat_name_1" />
+    <distsql-case id="drop-database-discovery-heartbeat-if-exists" value="DROP 
DB_DISCOVERY HEARTBEAT IF EXISTS heartbeat_name_0,heartbeat_name_1" />
     <distsql-case id="drop-encrypt-rule" value="DROP ENCRYPT RULE 
t_encrypt,t_encrypt_order" />
     <distsql-case id="drop-encrypt-rule-if-exists" value="DROP ENCRYPT RULE IF 
EXISTS t_encrypt,t_encrypt_order" />
     <distsql-case id="drop-shadow-rule" value="DROP SHADOW RULE 
shadow_rule_1,shadow_rule_2" />

Reply via email to