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" />