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 8259596 [DistSQL] Add `create/alter database discovery heartbeat`
statement to support new API. (#14093)
8259596 is described below
commit 8259596456e6c35cd0c71f29d76079e003543193
Author: lanchengx <[email protected]>
AuthorDate: Thu Dec 16 10:20:17 2021 +0800
[DistSQL] Add `create/alter database discovery heartbeat` statement to
support new API. (#14093)
* Add `create/alter database discovery heartbeat` statement to support new
API.
* Add `create/alter database discovery heartbeat` statement to support new
API.
* Modify the class name.
* Modify comment.
* Modify comment & format.
---
.../DatabaseDiscoveryRuleStatementConverter.java | 15 +++-
...DatabaseDiscoveryHeartbeatStatementUpdater.java | 90 ++++++++++++++++++++++
...DatabaseDiscoveryHeartbeatStatementUpdater.java | 82 ++++++++++++++++++++
...here.infra.distsql.update.RuleDefinitionUpdater | 2 +
...baseDiscoveryHeartbeatStatementUpdaterTest.java | 81 +++++++++++++++++++
...baseDiscoveryHeartbeatStatementUpdaterTest.java | 80 +++++++++++++++++++
.../antlr4/imports/db-discovery/RDLStatement.g4 | 22 ++++--
.../autogen/DatabaseDiscoveryDistSQLStatement.g4 | 2 +
.../DatabaseDiscoveryDistSQLStatementVisitor.java | 33 ++++++--
...java => DatabaseDiscoveryHeartbeatSegment.java} | 11 +--
.../segment/DatabaseDiscoveryTypeSegment.java | 2 +-
.../AlterDatabaseDiscoveryHeartbeatStatement.java} | 16 ++--
...CreateDatabaseDiscoveryHeartbeatStatement.java} | 16 ++--
.../rdl/alter/AlterRuleStatementAssert.java | 5 ++
...rDatabaseDiscoveryHeartbeatStatementAssert.java | 63 +++++++++++++++
.../rdl/create/CreateRuleStatementAssert.java | 5 ++
...eDatabaseDiscoveryHeartbeatStatementAssert.java | 63 +++++++++++++++
.../jaxb/cases/domain/SQLParserTestCases.java | 10 +++
.../rdl/ExpectedDatabaseDiscoveryHeartbeat.java | 23 +++---
...atabaseDiscoveryHeartbeatStatementTestCase.java | 23 +++---
...atabaseDiscoveryHeartbeatStatementTestCase.java | 23 +++---
.../src/main/resources/case/rdl/alter.xml | 8 ++
.../src/main/resources/case/rdl/create.xml | 9 +++
.../src/main/resources/sql/supported/rdl/alter.xml | 1 +
.../main/resources/sql/supported/rdl/create.xml | 1 +
25 files changed, 622 insertions(+), 64 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/converter/DatabaseDiscoveryRuleStatementConverter.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/converter/DatabaseDisco
[...]
index 85ab7c1..7bfe67d 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/converter/DatabaseDiscoveryRuleStatementConverter.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/converter/DatabaseDiscoveryRuleStatementConverter.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHe
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.AbstractDatabaseDiscoverySegment;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryConstructionSegment;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryDefinitionSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryTypeSegment;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
@@ -82,7 +83,19 @@ public final class DatabaseDiscoveryRuleStatementConverter {
}
/**
- * Convert database discovery type segment to database discovery type
configuration.
+ * Convert database discovery heartbeat segment to database discovery
heartbeat configuration.
+ *
+ * @param heartbeatSegments database discovery heartbeat segments
+ * @return database discovery heartbeat configuration
+ */
+ public static DatabaseDiscoveryRuleConfiguration
convertDiscoveryHeartbeat(final Collection<DatabaseDiscoveryHeartbeatSegment>
heartbeatSegments) {
+ DatabaseDiscoveryRuleConfiguration result = new
DatabaseDiscoveryRuleConfiguration(new LinkedList<>(), new LinkedHashMap<>(),
new LinkedHashMap<>());
+ heartbeatSegments.forEach(each ->
result.getDiscoveryHeartbeats().put(each.getHeartbeatName(), new
DatabaseDiscoveryHeartBeatConfiguration(each.getProperties())));
+ return result;
+ }
+
+ /**
+ * Convert database discovery type segment to database discovery heartbeat
configuration.
*
* @param typeSegment database discovery type segments
* @return database discovery type configuration
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/AlterDatabaseDiscoveryHeartbeatStatementUpdater.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/AlterDataba
[...]
new file mode 100644
index 0000000..d59527c
--- /dev/null
+++
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/AlterDatabaseDiscoveryHeartbeatStatementUpdater.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.dbdiscovery.distsql.handler.update;
+
+import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
+import
org.apache.shardingsphere.dbdiscovery.distsql.handler.converter.DatabaseDiscoveryRuleStatementConverter;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.AlterDatabaseDiscoveryHeartbeatStatement;
+import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
+import
org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import
org.apache.shardingsphere.infra.distsql.exception.rule.RequiredRuleMissedException;
+import
org.apache.shardingsphere.infra.distsql.update.RuleDefinitionAlterUpdater;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+
+import java.util.Collection;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+public final class AlterDatabaseDiscoveryHeartbeatStatementUpdater implements
RuleDefinitionAlterUpdater<AlterDatabaseDiscoveryHeartbeatStatement,
DatabaseDiscoveryRuleConfiguration> {
+
+ private static final String RULE_TYPE = "database discovery";
+
+ @Override
+ public DatabaseDiscoveryRuleConfiguration
buildToBeAlteredRuleConfiguration(final
AlterDatabaseDiscoveryHeartbeatStatement sqlStatement) {
+ return
DatabaseDiscoveryRuleStatementConverter.convertDiscoveryHeartbeat(sqlStatement.getHeartbeats());
+ }
+
+ @Override
+ public void updateCurrentRuleConfiguration(final
DatabaseDiscoveryRuleConfiguration currentRuleConfig, final
DatabaseDiscoveryRuleConfiguration toBeCreatedRuleConfig) {
+ if (null != currentRuleConfig) {
+
currentRuleConfig.getDiscoveryHeartbeats().putAll(toBeCreatedRuleConfig.getDiscoveryHeartbeats());
+ }
+ }
+
+ @Override
+ public void checkSQLStatement(final ShardingSphereMetaData
shardingSphereMetaData, final AlterDatabaseDiscoveryHeartbeatStatement
sqlStatement,
+ final DatabaseDiscoveryRuleConfiguration
currentRuleConfig) throws DistSQLException {
+ String schemaName = shardingSphereMetaData.getName();
+ checkCurrentConfiguration(schemaName, currentRuleConfig);
+ checkDuplicateHeartbeat(schemaName, sqlStatement);
+ checkNotExistHeartbeat(schemaName, sqlStatement, currentRuleConfig);
+ }
+
+ private void checkCurrentConfiguration(final String schemaName, final
DatabaseDiscoveryRuleConfiguration currentRuleConfig) throws DistSQLException {
+ DistSQLException.predictionThrow(currentRuleConfig != null, new
RequiredRuleMissedException(RULE_TYPE, schemaName));
+ }
+
+ private void checkNotExistHeartbeat(final String schemaName, final
AlterDatabaseDiscoveryHeartbeatStatement sqlStatement,
+ final
DatabaseDiscoveryRuleConfiguration currentRuleConfig) throws DistSQLException {
+ Collection<String> currentHeartbeats =
currentRuleConfig.getDiscoveryHeartbeats().keySet();
+ Collection<String> notExistHeartbeats =
sqlStatement.getHeartbeats().stream().map(DatabaseDiscoveryHeartbeatSegment::getHeartbeatName)
+ .filter(each ->
!currentHeartbeats.contains(each)).collect(Collectors.toSet());
+ DistSQLException.predictionThrow(notExistHeartbeats.isEmpty(), new
RequiredRuleMissedException(RULE_TYPE, schemaName, notExistHeartbeats));
+ }
+
+ private void checkDuplicateHeartbeat(final String schemaName, final
AlterDatabaseDiscoveryHeartbeatStatement sqlStatement) throws DistSQLException {
+ Collection<String> duplicateRuleNames =
getToBeCreatedDuplicateRuleNames(sqlStatement);
+ DistSQLException.predictionThrow(duplicateRuleNames.isEmpty(), new
DuplicateRuleException(RULE_TYPE, schemaName, duplicateRuleNames));
+ }
+
+ private Collection<String> getToBeCreatedDuplicateRuleNames(final
AlterDatabaseDiscoveryHeartbeatStatement sqlStatement) {
+ return
sqlStatement.getHeartbeats().stream().collect(Collectors.toMap(DatabaseDiscoveryHeartbeatSegment::getHeartbeatName,
e -> 1, Integer::sum))
+ .entrySet().stream().filter(entry -> entry.getValue() >
1).map(Entry::getKey).collect(Collectors.toSet());
+ }
+
+ @Override
+ public Class<DatabaseDiscoveryRuleConfiguration>
getRuleConfigurationClass() {
+ return DatabaseDiscoveryRuleConfiguration.class;
+ }
+
+ @Override
+ public String getType() {
+ return
AlterDatabaseDiscoveryHeartbeatStatement.class.getCanonicalName();
+ }
+}
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/CreateDatabaseDiscoveryHeartbeatStatementUpdater.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/CreateData
[...]
new file mode 100644
index 0000000..0635da6
--- /dev/null
+++
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/CreateDatabaseDiscoveryHeartbeatStatementUpdater.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.dbdiscovery.distsql.handler.update;
+
+import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
+import
org.apache.shardingsphere.dbdiscovery.distsql.handler.converter.DatabaseDiscoveryRuleStatementConverter;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryHeartbeatStatement;
+import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
+import
org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import
org.apache.shardingsphere.infra.distsql.update.RuleDefinitionCreateUpdater;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+
+import java.util.Collection;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+public final class CreateDatabaseDiscoveryHeartbeatStatementUpdater implements
RuleDefinitionCreateUpdater<CreateDatabaseDiscoveryHeartbeatStatement,
DatabaseDiscoveryRuleConfiguration> {
+
+ private static final String RULE_TYPE = "database discovery";
+
+ @Override
+ public DatabaseDiscoveryRuleConfiguration
buildToBeCreatedRuleConfiguration(final
CreateDatabaseDiscoveryHeartbeatStatement sqlStatement) {
+ return
DatabaseDiscoveryRuleStatementConverter.convertDiscoveryHeartbeat(sqlStatement.getHeartbeats());
+ }
+
+ @Override
+ public void updateCurrentRuleConfiguration(final
DatabaseDiscoveryRuleConfiguration currentRuleConfig, final
DatabaseDiscoveryRuleConfiguration toBeCreatedRuleConfig) {
+ if (null != currentRuleConfig) {
+
currentRuleConfig.getDiscoveryHeartbeats().putAll(toBeCreatedRuleConfig.getDiscoveryHeartbeats());
+ }
+ }
+
+ @Override
+ public void checkSQLStatement(final ShardingSphereMetaData
shardingSphereMetaData, final CreateDatabaseDiscoveryHeartbeatStatement
sqlStatement,
+ final DatabaseDiscoveryRuleConfiguration
currentRuleConfig) throws DistSQLException {
+ String schemaName = shardingSphereMetaData.getName();
+ checkDuplicateHeartbeat(schemaName, sqlStatement, currentRuleConfig);
+ }
+
+ private void checkDuplicateHeartbeat(final String schemaName, final
CreateDatabaseDiscoveryHeartbeatStatement sqlStatement,
+ final
DatabaseDiscoveryRuleConfiguration currentRuleConfig) throws DistSQLException {
+ if (null == currentRuleConfig) {
+ return;
+ }
+ Collection<String> existRuleNames =
currentRuleConfig.getDiscoveryHeartbeats().keySet();
+ Collection<String> duplicateRuleNames =
sqlStatement.getHeartbeats().stream().map(DatabaseDiscoveryHeartbeatSegment::getHeartbeatName)
+ .filter(existRuleNames::contains).collect(Collectors.toSet());
+
duplicateRuleNames.addAll(getToBeCreatedDuplicateRuleNames(sqlStatement));
+ DistSQLException.predictionThrow(duplicateRuleNames.isEmpty(), new
DuplicateRuleException(RULE_TYPE, schemaName, duplicateRuleNames));
+ }
+
+ private Collection<String> getToBeCreatedDuplicateRuleNames(final
CreateDatabaseDiscoveryHeartbeatStatement sqlStatement) {
+ return
sqlStatement.getHeartbeats().stream().collect(Collectors.toMap(DatabaseDiscoveryHeartbeatSegment::getHeartbeatName,
e -> 1, Integer::sum))
+ .entrySet().stream().filter(entry -> entry.getValue() >
1).map(Entry::getKey).collect(Collectors.toSet());
+ }
+
+ @Override
+ public Class<DatabaseDiscoveryRuleConfiguration>
getRuleConfigurationClass() {
+ return DatabaseDiscoveryRuleConfiguration.class;
+ }
+
+ @Override
+ public String getType() {
+ return
CreateDatabaseDiscoveryHeartbeatStatement.class.getCanonicalName();
+ }
+}
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
index e07aa92..b45cab8 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
@@ -19,3 +19,5 @@
org.apache.shardingsphere.dbdiscovery.distsql.handler.update.CreateDatabaseDisco
org.apache.shardingsphere.dbdiscovery.distsql.handler.update.AlterDatabaseDiscoveryRuleStatementUpdater
org.apache.shardingsphere.dbdiscovery.distsql.handler.update.DropDatabaseDiscoveryRuleStatementUpdater
org.apache.shardingsphere.dbdiscovery.distsql.handler.update.CreateDatabaseDiscoveryTypeStatementUpdater
+org.apache.shardingsphere.dbdiscovery.distsql.handler.update.AlterDatabaseDiscoveryHeartbeatStatementUpdater
+org.apache.shardingsphere.dbdiscovery.distsql.handler.update.CreateDatabaseDiscoveryHeartbeatStatementUpdater
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/AlterDatabaseDiscoveryHeartbeatStatementUpdaterTest.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/AlterDa
[...]
new file mode 100644
index 0000000..f24e501
--- /dev/null
+++
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/AlterDatabaseDiscoveryHeartbeatStatementUpdaterTest.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.dbdiscovery.distsql.handler.update;
+
+import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.AlterDatabaseDiscoveryHeartbeatStatement;
+import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
+import
org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import
org.apache.shardingsphere.infra.distsql.exception.rule.RequiredRuleMissedException;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class AlterDatabaseDiscoveryHeartbeatStatementUpdaterTest {
+
+ @Mock
+ private ShardingSphereMetaData shardingSphereMetaData;
+
+ private final AlterDatabaseDiscoveryHeartbeatStatementUpdater updater =
new AlterDatabaseDiscoveryHeartbeatStatementUpdater();
+
+ @Test(expected = DuplicateRuleException.class)
+ public void assertCheckSQLStatementWithDuplicateHeartbeatNames() throws
DistSQLException {
+ DatabaseDiscoveryHeartbeatSegment segment1 = new
DatabaseDiscoveryHeartbeatSegment("heartbeat", createProperties("key",
"value"));
+ DatabaseDiscoveryHeartbeatSegment segment2 = new
DatabaseDiscoveryHeartbeatSegment("heartbeat", createProperties("key",
"value"));
+ updater.checkSQLStatement(shardingSphereMetaData, new
AlterDatabaseDiscoveryHeartbeatStatement(Arrays.asList(segment1, segment2)),
+ new
DatabaseDiscoveryRuleConfiguration(Collections.emptyList(),
Collections.emptyMap(), Collections.emptyMap()));
+ }
+
+ @Test(expected = RequiredRuleMissedException.class)
+ public void assertCheckSQLStatementWithNotExistDiscoveryHeartbeatName()
throws DistSQLException {
+ DatabaseDiscoveryHeartbeatSegment segment = new
DatabaseDiscoveryHeartbeatSegment("heartbeat", createProperties("key",
"value"));
+ DatabaseDiscoveryRuleConfiguration configuration = new
DatabaseDiscoveryRuleConfiguration(Collections.emptyList(),
Collections.singletonMap("heartbeat1", null), Collections.emptyMap());
+ updater.checkSQLStatement(shardingSphereMetaData, new
AlterDatabaseDiscoveryHeartbeatStatement(Collections.singleton(segment)),
configuration);
+ }
+
+ @Test
+ public void assertUpdate() {
+ DatabaseDiscoveryHeartbeatSegment segment1 = new
DatabaseDiscoveryHeartbeatSegment("heartbeat_1", createProperties("key_1",
"value_1"));
+ DatabaseDiscoveryHeartbeatSegment segment2 = new
DatabaseDiscoveryHeartbeatSegment("heartbeat_2", createProperties("key_2",
"value_2"));
+ DatabaseDiscoveryRuleConfiguration ruleConfiguration =
updater.buildToBeAlteredRuleConfiguration(new
AlterDatabaseDiscoveryHeartbeatStatement(Arrays.asList(segment1, segment2)));
+ DatabaseDiscoveryRuleConfiguration currentConfiguration = new
DatabaseDiscoveryRuleConfiguration(new LinkedList<>(), new LinkedHashMap<>(),
new LinkedHashMap<>());
+ updater.updateCurrentRuleConfiguration(currentConfiguration,
ruleConfiguration);
+ assertThat(currentConfiguration.getDiscoveryHeartbeats().size(),
is(2));
+
assertThat(currentConfiguration.getDiscoveryHeartbeats().get("heartbeat_1").getProps(),
is(createProperties("key_1", "value_1")));
+
assertThat(currentConfiguration.getDiscoveryHeartbeats().get("heartbeat_2").getProps(),
is(createProperties("key_2", "value_2")));
+ }
+
+ private Properties createProperties(final String key, final String value) {
+ Properties result = new Properties();
+ result.put(key, value);
+ return result;
+ }
+}
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/CreateDatabaseDiscoveryHeartbeatStatementUpdaterTest.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/Create
[...]
new file mode 100644
index 0000000..9a6de0d
--- /dev/null
+++
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/CreateDatabaseDiscoveryHeartbeatStatementUpdaterTest.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.dbdiscovery.distsql.handler.update;
+
+import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryHeartbeatStatement;
+import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
+import
org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class CreateDatabaseDiscoveryHeartbeatStatementUpdaterTest {
+
+ @Mock
+ private ShardingSphereMetaData shardingSphereMetaData;
+
+ private final CreateDatabaseDiscoveryHeartbeatStatementUpdater updater =
new CreateDatabaseDiscoveryHeartbeatStatementUpdater();
+
+ @Test(expected = DuplicateRuleException.class)
+ public void assertCheckSQLStatementWithDuplicateHeartbeatNames() throws
DistSQLException {
+ DatabaseDiscoveryHeartbeatSegment segment1 = new
DatabaseDiscoveryHeartbeatSegment("heartbeat", createProperties("key",
"value"));
+ DatabaseDiscoveryHeartbeatSegment segment2 = new
DatabaseDiscoveryHeartbeatSegment("heartbeat", createProperties("key",
"value"));
+ updater.checkSQLStatement(shardingSphereMetaData, new
CreateDatabaseDiscoveryHeartbeatStatement(Arrays.asList(segment1, segment2)),
+ new
DatabaseDiscoveryRuleConfiguration(Collections.emptyList(),
Collections.emptyMap(), Collections.emptyMap()));
+ }
+
+ @Test(expected = DuplicateRuleException.class)
+ public void assertCheckSQLStatementWithExistDiscoveryHeartbeatName()
throws DistSQLException {
+ DatabaseDiscoveryHeartbeatSegment segment = new
DatabaseDiscoveryHeartbeatSegment("heartbeat", createProperties("key",
"value"));
+ DatabaseDiscoveryRuleConfiguration configuration = new
DatabaseDiscoveryRuleConfiguration(Collections.emptyList(),
Collections.singletonMap("heartbeat", null), Collections.emptyMap());
+ updater.checkSQLStatement(shardingSphereMetaData, new
CreateDatabaseDiscoveryHeartbeatStatement(Collections.singleton(segment)),
configuration);
+ }
+
+ @Test
+ public void assertUpdate() {
+ DatabaseDiscoveryHeartbeatSegment segment1 = new
DatabaseDiscoveryHeartbeatSegment("heartbeat_1", createProperties("key_1",
"value_1"));
+ DatabaseDiscoveryHeartbeatSegment segment2 = new
DatabaseDiscoveryHeartbeatSegment("heartbeat_2", createProperties("key_2",
"value_2"));
+ DatabaseDiscoveryRuleConfiguration ruleConfiguration =
updater.buildToBeCreatedRuleConfiguration(new
CreateDatabaseDiscoveryHeartbeatStatement(Arrays.asList(segment1, segment2)));
+ DatabaseDiscoveryRuleConfiguration currentConfiguration = new
DatabaseDiscoveryRuleConfiguration(new LinkedList<>(), new LinkedHashMap<>(),
new LinkedHashMap<>());
+ updater.updateCurrentRuleConfiguration(currentConfiguration,
ruleConfiguration);
+ assertThat(currentConfiguration.getDiscoveryHeartbeats().size(),
is(2));
+
assertThat(currentConfiguration.getDiscoveryHeartbeats().get("heartbeat_1").getProps(),
is(createProperties("key_1", "value_1")));
+
assertThat(currentConfiguration.getDiscoveryHeartbeats().get("heartbeat_2").getProps(),
is(createProperties("key_2", "value_2")));
+ }
+
+ private Properties createProperties(final String key, final String value) {
+ Properties result = new Properties();
+ result.put(key, value);
+ return result;
+ }
+}
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 3cb4151..17ec184 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)*
;
+createDatabaseDiscoveryHeartbeat
+ : CREATE DB_DISCOVERY HEARTBEAT heartbeatDefinition (COMMA
heartbeatDefinition)*
+ ;
+
+alterDatabaseDiscoveryHeartbeat
+ : ALTER DB_DISCOVERY HEARTBEAT heartbeatDefinition (COMMA
heartbeatDefinition)*
+ ;
+
databaseDiscoveryRule
: (databaseDiscoveryRuleDefinition | databaseDiscoveryRuleConstruction)
;
@@ -51,6 +59,10 @@ databaseDiscoveryTypeDefinition
: discoveryTypeName LP typeDefinition RP
;
+heartbeatDefinition
+ : discoveryHeartbeatName LP PROPERTIES LP properties RP RP
+ ;
+
ruleName
: IDENTIFIER
;
@@ -64,22 +76,22 @@ resourceName
;
typeDefinition
- : TYPE LP NAME EQ typeName (COMMA PROPERTIES LP typeProperties RP)? RP
+ : TYPE LP NAME EQ typeName (COMMA PROPERTIES LP properties RP)? RP
;
discoveryHeartbeat
- : HEARTBEAT LP PROPERTIES LP typeProperties RP RP
+ : HEARTBEAT LP PROPERTIES LP properties RP RP
;
typeName
: IDENTIFIER
;
-typeProperties
- : typeProperty (COMMA typeProperty)*
+properties
+ : property (COMMA property)*
;
-typeProperty
+property
: key=(IDENTIFIER | STRING) EQ value=(NUMBER | INT | STRING)
;
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/DatabaseDiscoveryDistSQLStatement.g4
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/DatabaseDiscoveryDistSQLStatement.g4
index 17f8397..76a2707 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/DatabaseDiscoveryDistSQLStatement.g4
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/DatabaseDiscoveryDistSQLStatement.g4
@@ -27,5 +27,7 @@ execute
| showDatabaseDiscoveryHeartbeats
| showDatabaseDiscoveryRules
| createDatabaseDiscoveryType
+ | createDatabaseDiscoveryHeartbeat
+ | alterDatabaseDiscoveryHeartbeat
) SEMI?
;
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 2d9f555..d783b90 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
@@ -21,8 +21,11 @@ import org.antlr.v4.runtime.tree.ParseTree;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.AbstractDatabaseDiscoverySegment;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryConstructionSegment;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryDefinitionSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryTypeSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.AlterDatabaseDiscoveryHeartbeatStatement;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.AlterDatabaseDiscoveryRuleStatement;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryHeartbeatStatement;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryRuleStatement;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryTypeStatement;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.DropDatabaseDiscoveryRuleStatement;
@@ -30,7 +33,9 @@ import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDataba
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryRulesStatement;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryTypesStatement;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementBaseVisitor;
+import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.AlterDatabaseDiscoveryHeartbeatContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.AlterDatabaseDiscoveryRuleContext;
+import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.CreateDatabaseDiscoveryHeartbeatContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.CreateDatabaseDiscoveryRuleContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.CreateDatabaseDiscoveryTypeContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.DatabaseDiscoveryRuleConstructionContext;
@@ -38,14 +43,14 @@ import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQL
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.DatabaseDiscoveryRuleDefinitionContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.DatabaseDiscoveryTypeDefinitionContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.DropDatabaseDiscoveryRuleContext;
+import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.PropertiesContext;
+import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.PropertyContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.ResourcesContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.SchemaNameContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.ShowDatabaseDiscoveryHeartbeatsContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.ShowDatabaseDiscoveryRulesContext;
-import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.TypeDefinitionContext;
import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.ShowDatabaseDiscoveryTypesContext;
-import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.TypePropertiesContext;
-import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.TypePropertyContext;
+import
org.apache.shardingsphere.distsql.parser.autogen.DatabaseDiscoveryDistSQLStatementParser.TypeDefinitionContext;
import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
@@ -91,7 +96,7 @@ public final class DatabaseDiscoveryDistSQLStatementVisitor
extends DatabaseDisc
@Override
public ASTNode visitDatabaseDiscoveryRuleDefinition(final
DatabaseDiscoveryRuleDefinitionContext ctx) {
return new
DatabaseDiscoveryDefinitionSegment(getIdentifierValue(ctx.ruleName()),
buildResources(ctx.resources()),
- (AlgorithmSegment) visit(ctx.typeDefinition()),
getProperties(ctx.discoveryHeartbeat().typeProperties()));
+ (AlgorithmSegment) visit(ctx.typeDefinition()),
getProperties(ctx.discoveryHeartbeat().properties()));
}
@@ -110,6 +115,20 @@ public final class
DatabaseDiscoveryDistSQLStatementVisitor extends DatabaseDisc
}
@Override
+ public ASTNode visitCreateDatabaseDiscoveryHeartbeat(final
CreateDatabaseDiscoveryHeartbeatContext ctx) {
+ return new
CreateDatabaseDiscoveryHeartbeatStatement(ctx.heartbeatDefinition().stream()
+ .map(each -> new
DatabaseDiscoveryHeartbeatSegment(getIdentifierValue(each.discoveryHeartbeatName()),
getProperties(each.properties())))
+ .collect(Collectors.toCollection(LinkedList::new)));
+ }
+
+ @Override
+ public ASTNode visitAlterDatabaseDiscoveryHeartbeat(final
AlterDatabaseDiscoveryHeartbeatContext ctx) {
+ return new
AlterDatabaseDiscoveryHeartbeatStatement(ctx.heartbeatDefinition().stream()
+ .map(each -> new
DatabaseDiscoveryHeartbeatSegment(getIdentifierValue(each.discoveryHeartbeatName()),
getProperties(each.properties())))
+ .collect(Collectors.toCollection(LinkedList::new)));
+ }
+
+ @Override
public ASTNode visitCreateDatabaseDiscoveryType(final
CreateDatabaseDiscoveryTypeContext ctx) {
return new
CreateDatabaseDiscoveryTypeStatement(buildAlgorithmEntry(ctx.databaseDiscoveryTypeDefinition()));
}
@@ -147,12 +166,12 @@ public final class
DatabaseDiscoveryDistSQLStatementVisitor extends DatabaseDisc
@Override
public ASTNode visitTypeDefinition(final TypeDefinitionContext ctx) {
- return new AlgorithmSegment(getIdentifierValue(ctx.typeName()), null
== ctx.typeProperties() ? new Properties() :
getProperties(ctx.typeProperties()));
+ return new AlgorithmSegment(getIdentifierValue(ctx.typeName()), null
== ctx.properties() ? new Properties() : getProperties(ctx.properties()));
}
- private Properties getProperties(final TypePropertiesContext ctx) {
+ private Properties getProperties(final PropertiesContext ctx) {
Properties result = new Properties();
- for (TypePropertyContext each : ctx.typeProperty()) {
+ for (PropertyContext each : ctx.property()) {
result.setProperty(new
IdentifierValue(each.key.getText()).getValue(), new
IdentifierValue(each.value.getText()).getValue());
}
return result;
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/segment/DatabaseDiscoveryTypeSegment.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/segment/DatabaseDiscoveryHeartbeat
[...]
similarity index 79%
copy from
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/segment/DatabaseDiscoveryTypeSegment.java
copy to
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/segment/DatabaseDiscoveryHeartbeatSegment.java
index 58c9f22..6e0e9b7 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/segment/DatabaseDiscoveryTypeSegment.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/segment/DatabaseDiscoveryHeartbeatSegment.java
@@ -19,17 +19,18 @@ package
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import java.util.Properties;
+
/**
- * Database discovery type.
+ * Database discovery heartbeat segment.
*/
@RequiredArgsConstructor
@Getter
-public final class DatabaseDiscoveryTypeSegment implements ASTNode {
+public final class DatabaseDiscoveryHeartbeatSegment implements ASTNode {
- private final String discoveryTypeName;
+ private final String heartbeatName;
- private final AlgorithmSegment algorithmSegment;
+ private final Properties properties;
}
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/segment/DatabaseDiscoveryTypeSegment.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/segment/DatabaseDiscoveryTypeSegment.java
index 58c9f22..917654d 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/segment/DatabaseDiscoveryTypeSegment.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/segment/DatabaseDiscoveryTypeSegment.java
@@ -23,7 +23,7 @@ import
org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
/**
- * Database discovery type.
+ * Database discovery type segment.
*/
@RequiredArgsConstructor
@Getter
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/segment/DatabaseDiscoveryTypeSegment.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/AlterDatabaseDiscoveryHe
[...]
similarity index 64%
copy from
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/segment/DatabaseDiscoveryTypeSegment.java
copy to
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryHeartbeatStatement.java
index 58c9f22..cf5531c 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/segment/DatabaseDiscoveryTypeSegment.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/AlterDatabaseDiscoveryHeartbeatStatement.java
@@ -15,21 +15,21 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.dbdiscovery.distsql.parser.segment;
+package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
+import
org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+
+import java.util.Collection;
/**
- * Database discovery type.
+ * Alter database discovery heartbeat statement.
*/
@RequiredArgsConstructor
@Getter
-public final class DatabaseDiscoveryTypeSegment implements ASTNode {
-
- private final String discoveryTypeName;
+public final class AlterDatabaseDiscoveryHeartbeatStatement extends
AlterRuleStatement {
- private final AlgorithmSegment algorithmSegment;
+ private final Collection<DatabaseDiscoveryHeartbeatSegment> heartbeats;
}
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/segment/DatabaseDiscoveryTypeSegment.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/CreateDatabaseDiscoveryH
[...]
similarity index 64%
copy from
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/segment/DatabaseDiscoveryTypeSegment.java
copy to
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryHeartbeatStatement.java
index 58c9f22..1a215d9 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/segment/DatabaseDiscoveryTypeSegment.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/CreateDatabaseDiscoveryHeartbeatStatement.java
@@ -15,21 +15,21 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.dbdiscovery.distsql.parser.segment;
+package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
+import
org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+
+import java.util.Collection;
/**
- * Database discovery type.
+ * Create database discovery heartbeat statement.
*/
@RequiredArgsConstructor
@Getter
-public final class DatabaseDiscoveryTypeSegment implements ASTNode {
-
- private final String discoveryTypeName;
+public final class CreateDatabaseDiscoveryHeartbeatStatement extends
CreateRuleStatement {
- private final AlgorithmSegment algorithmSegment;
+ private final Collection<DatabaseDiscoveryHeartbeatSegment> heartbeats;
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
index 148ee4e..a13dcf8 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.AlterDatabaseDiscoveryHeartbeatStatement;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.AlterDatabaseDiscoveryRuleStatement;
import
org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
import
org.apache.shardingsphere.distsql.parser.statement.rdl.create.AlterDefaultSingleTableRuleStatement;
@@ -30,6 +31,7 @@ import
org.apache.shardingsphere.sharding.distsql.parser.statement.AlterSharding
import
org.apache.shardingsphere.sharding.distsql.parser.statement.AlterShardingTableRuleStatement;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDatabaseDiscoveryRuleStatementAssert;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDatabaseDiscoveryHeartbeatStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDefaultSingleTableRuleStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterEncryptRuleStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterReadwriteSplittingRuleStatementAssert;
@@ -40,6 +42,7 @@ import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterShardingKeyGeneratorStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterShardingTableRuleStatementAssert;
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.distsql.rdl.alter.AlterDatabaseDiscoveryHeartbeatStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterDefaultSingleTableRuleStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterEncryptRuleStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterReadwriteSplittingRuleStatementTestCase;
@@ -64,6 +67,8 @@ public final class AlterRuleStatementAssert {
public static void assertIs(final SQLCaseAssertContext assertContext,
final AlterRuleStatement actual, final SQLParserTestCase expected) {
if (actual instanceof AlterDatabaseDiscoveryRuleStatement) {
AlterDatabaseDiscoveryRuleStatementAssert.assertIs(assertContext,
(AlterDatabaseDiscoveryRuleStatement) actual, expected);
+ } else if (actual instanceof AlterDatabaseDiscoveryHeartbeatStatement)
{
+
AlterDatabaseDiscoveryHeartbeatStatementAssert.assertIs(assertContext,
(AlterDatabaseDiscoveryHeartbeatStatement) actual,
(AlterDatabaseDiscoveryHeartbeatStatementTestCase) expected);
} else if (actual instanceof AlterEncryptRuleStatement) {
AlterEncryptRuleStatementAssert.assertIs(assertContext,
(AlterEncryptRuleStatement) actual, (AlterEncryptRuleStatementTestCase)
expected);
} else if (actual instanceof AlterReadwriteSplittingRuleStatement) {
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDatabaseDiscoveryHeartbeatStatementAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDatabaseDiscoveryHeartbeatStatementAssert.java
new file mode 100644
index 0000000..c880cb6
--- /dev/null
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDatabaseDiscoveryHeartbeatStatementAssert.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.AlterDatabaseDiscoveryHeartbeatStatement;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.distsql.PropertiesAssert;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterDatabaseDiscoveryHeartbeatStatementTestCase;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Alter database discovery heartbeat statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AlterDatabaseDiscoveryHeartbeatStatementAssert {
+
+ /**
+ * Assert alter database discovery heartbeat statement is correct with
expected parser result.
+ *
+ * @param assertContext assert context
+ * @param actual actual alter database discovery heartbeat statement
+ * @param expected expected alter database discovery heartbeat statement
test case
+ */
+ public static void assertIs(final SQLCaseAssertContext assertContext,
final AlterDatabaseDiscoveryHeartbeatStatement actual, final
AlterDatabaseDiscoveryHeartbeatStatementTestCase expected) {
+ if (null == expected) {
+ assertNull(assertContext.getText("Actual statement should not
exist."), actual);
+ } else {
+ assertNotNull(assertContext.getText("Actual statement should
exist."), actual);
+ Map<String, DatabaseDiscoveryHeartbeatSegment> actualMap =
actual.getHeartbeats().stream().collect(Collectors.toMap(DatabaseDiscoveryHeartbeatSegment::getHeartbeatName,
each -> each));
+ expected.getHeartbeats().forEach(each -> {
+ DatabaseDiscoveryHeartbeatSegment actualSegment =
actualMap.get(each.getName());
+ assertNotNull(actualSegment);
+ assertThat(actualSegment.getHeartbeatName(),
is(each.getName()));
+ PropertiesAssert.assertIs(assertContext,
actualSegment.getProperties(), each.getProperties());
+ });
+ }
+ }
+}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/CreateRuleStatementAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/CreateRuleStatementAssert.java
index 30da112..1fa7a49 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/CreateRuleStatementAssert.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/CreateRuleStatementAssert.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryHeartbeatStatement;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryRuleStatement;
import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryTypeStatement;
import
org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateDefaultSingleTableRuleStatement;
@@ -35,6 +36,7 @@ import
org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardin
import
org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardingKeyGeneratorStatement;
import
org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardingTableRuleStatement;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl.CreateDatabaseDiscoveryHeartbeatStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl.CreateDatabaseDiscoveryRuleStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl.CreateDatabaseDiscoveryTypeStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl.CreateDefaultShadowAlgorithmStatementAssert;
@@ -50,6 +52,7 @@ import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl.CreateShardingKeyGeneratorStatementAssert;
import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl.CreateShardingTableRuleStatementAssert;
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.distsql.rdl.create.CreateDatabaseDiscoveryHeartbeatStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDatabaseDiscoveryTypeStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShadowAlgorithmStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShardingStrategyStatementTestCase;
@@ -81,6 +84,8 @@ public final class CreateRuleStatementAssert {
CreateDatabaseDiscoveryRuleStatementAssert.assertIs(assertContext,
(CreateDatabaseDiscoveryRuleStatement) actual, expected);
} else if (actual instanceof CreateDatabaseDiscoveryTypeStatement) {
CreateDatabaseDiscoveryTypeStatementAssert.assertIs(assertContext,
(CreateDatabaseDiscoveryTypeStatement) actual,
(CreateDatabaseDiscoveryTypeStatementTestCase) expected);
+ } else if (actual instanceof
CreateDatabaseDiscoveryHeartbeatStatement) {
+
CreateDatabaseDiscoveryHeartbeatStatementAssert.assertIs(assertContext,
(CreateDatabaseDiscoveryHeartbeatStatement) actual,
(CreateDatabaseDiscoveryHeartbeatStatementTestCase) expected);
} else if (actual instanceof CreateEncryptRuleStatement) {
CreateEncryptRuleStatementAssert.assertIs(assertContext,
(CreateEncryptRuleStatement) actual, (CreateEncryptRuleStatementTestCase)
expected);
} else if (actual instanceof CreateReadwriteSplittingRuleStatement) {
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDatabaseDiscoveryHeartbeatStatementAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDatabaseDiscoveryHeartbeatStatementAssert.java
new file mode 100644
index 0000000..af256b1
--- /dev/null
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDatabaseDiscoveryHeartbeatStatementAssert.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
+import
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.CreateDatabaseDiscoveryHeartbeatStatement;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.distsql.PropertiesAssert;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDatabaseDiscoveryHeartbeatStatementTestCase;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Create database discovery heartbeat statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class CreateDatabaseDiscoveryHeartbeatStatementAssert {
+
+ /**
+ * Assert create database discovery heartbeat statement is correct with
expected parser result.
+ *
+ * @param assertContext assert context
+ * @param actual actual create database discovery heartbeat statement
+ * @param expected expected create database discovery heartbeat statement
test case
+ */
+ public static void assertIs(final SQLCaseAssertContext assertContext,
final CreateDatabaseDiscoveryHeartbeatStatement actual, final
CreateDatabaseDiscoveryHeartbeatStatementTestCase expected) {
+ if (null == expected) {
+ assertNull(assertContext.getText("Actual statement should not
exist."), actual);
+ } else {
+ assertNotNull(assertContext.getText("Actual statement should
exist."), actual);
+ Map<String, DatabaseDiscoveryHeartbeatSegment> actualMap =
actual.getHeartbeats().stream().collect(Collectors.toMap(DatabaseDiscoveryHeartbeatSegment::getHeartbeatName,
each -> each));
+ expected.getHeartbeats().forEach(each -> {
+ DatabaseDiscoveryHeartbeatSegment actualSegment =
actualMap.get(each.getName());
+ assertNotNull(actualSegment);
+ assertThat(actualSegment.getHeartbeatName(),
is(each.getName()));
+ PropertiesAssert.assertIs(assertContext,
actualSegment.getProperties(), each.getProperties());
+ });
+ }
+ }
+}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
index 6b55854..1b09b16 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
@@ -155,6 +155,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.ral.scaling.StopScalingSourceWritingStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterDatabaseDiscoveryConstructionRuleStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterDatabaseDiscoveryDefinitionRuleStatementTestCase;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterDatabaseDiscoveryHeartbeatStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterDefaultSingleTableRuleStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterEncryptRuleStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterReadwriteSplittingRuleStatementTestCase;
@@ -171,6 +172,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.create.CreateDatabaseDiscoveryConstructionRuleStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDatabaseDiscoveryDefinitionRuleStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDatabaseDiscoveryTypeStatementTestCase;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDatabaseDiscoveryHeartbeatStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShadowAlgorithmStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShardingStrategyStatementTestCase;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultSingleTableRuleStatementTestCase;
@@ -560,6 +562,12 @@ public final class SQLParserTestCases {
@XmlElement(name = "create-database-discovery-type")
private final List<CreateDatabaseDiscoveryTypeStatementTestCase>
createDatabaseDiscoveryTypeTestCases = new LinkedList<>();
+ @XmlElement(name = "create-database-discovery-heartbeat")
+ private final List<CreateDatabaseDiscoveryHeartbeatStatementTestCase>
createDatabaseDiscoveryHeartbeatTestCases = new LinkedList<>();
+
+ @XmlElement(name = "alter-database-discovery-heartbeat")
+ private final List<AlterDatabaseDiscoveryHeartbeatStatementTestCase>
alterDatabaseDiscoveryHeartbeatTestCases = new LinkedList<>();
+
@XmlElement(name = "create-encrypt-rule")
private final List<CreateEncryptRuleStatementTestCase>
createEncryptRuleTestCase = new LinkedList<>();
@@ -958,6 +966,8 @@ public final class SQLParserTestCases {
putAll(createDatabaseDiscoveryDefinitionRuleTestCases, result);
putAll(createDataBaseDiscoveryConstructionRuleTestCase, result);
putAll(createDatabaseDiscoveryTypeTestCases, result);
+ putAll(createDatabaseDiscoveryHeartbeatTestCases, result);
+ putAll(alterDatabaseDiscoveryHeartbeatTestCases, result);
putAll(createEncryptRuleTestCase, result);
putAll(createReadwriteSplittingRuleTestCase, result);
putAll(createShardingBindingTableRulesTestCase, result);
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/segment/DatabaseDiscoveryTypeSegment.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/distsql/rdl/ExpectedDatabaseDiscoveryHeartbeat.java
similarity index 52%
copy from
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/segment/DatabaseDiscoveryTypeSegment.java
copy to
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/distsql/rdl/ExpectedDatabaseDiscoveryHeartbeat.java
index 58c9f22..23eac66 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/segment/DatabaseDiscoveryTypeSegment.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/distsql/rdl/ExpectedDatabaseDiscoveryHeartbeat.java
@@ -15,21 +15,26 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.dbdiscovery.distsql.parser.segment;
+package
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import lombok.Setter;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedIdentifierSQLSegment;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.ExpectedProperties;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
/**
- * Database discovery type.
+ * Expected database discovery heartbeat.
*/
-@RequiredArgsConstructor
@Getter
-public final class DatabaseDiscoveryTypeSegment implements ASTNode {
+@Setter
+public final class ExpectedDatabaseDiscoveryHeartbeat extends
AbstractExpectedIdentifierSQLSegment {
- private final String discoveryTypeName;
+ @XmlAttribute(name = "heartbeat-name")
+ private String name;
- private final AlgorithmSegment algorithmSegment;
+ @XmlElement(name = "properties")
+ private ExpectedProperties properties;
}
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/segment/DatabaseDiscoveryTypeSegment.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/alter/AlterDatabaseDiscoveryHeartbeatStatementTestCase.java
similarity index 52%
copy from
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/segment/DatabaseDiscoveryTypeSegment.java
copy to
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/alter/AlterDatabaseDiscoveryHeartbeatStatementTestCase.java
index 58c9f22..01b3185 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/segment/DatabaseDiscoveryTypeSegment.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/alter/AlterDatabaseDiscoveryHeartbeatStatementTestCase.java
@@ -15,21 +15,24 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.dbdiscovery.distsql.parser.segment;
+package
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import lombok.Setter;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedDatabaseDiscoveryHeartbeat;
+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;
/**
- * Database discovery type.
+ * Alter database discovery heartbeat statement test case.
*/
-@RequiredArgsConstructor
@Getter
-public final class DatabaseDiscoveryTypeSegment implements ASTNode {
-
- private final String discoveryTypeName;
+@Setter
+public final class AlterDatabaseDiscoveryHeartbeatStatementTestCase extends
SQLParserTestCase {
- private final AlgorithmSegment algorithmSegment;
+ @XmlElement(name = "heartbeat")
+ private final List<ExpectedDatabaseDiscoveryHeartbeat> heartbeats = new
LinkedList<>();
}
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/segment/DatabaseDiscoveryTypeSegment.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDatabaseDiscoveryHeartbeatStatementTestCase.java
similarity index 52%
copy from
shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/segment/DatabaseDiscoveryTypeSegment.java
copy to
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDatabaseDiscoveryHeartbeatStatementTestCase.java
index 58c9f22..9a4e6ce 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/segment/DatabaseDiscoveryTypeSegment.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDatabaseDiscoveryHeartbeatStatementTestCase.java
@@ -15,21 +15,24 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.dbdiscovery.distsql.parser.segment;
+package
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import lombok.Setter;
+import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedDatabaseDiscoveryHeartbeat;
+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;
/**
- * Database discovery type.
+ * Create database discovery heartbeat statement test case.
*/
-@RequiredArgsConstructor
@Getter
-public final class DatabaseDiscoveryTypeSegment implements ASTNode {
-
- private final String discoveryTypeName;
+@Setter
+public final class CreateDatabaseDiscoveryHeartbeatStatementTestCase extends
SQLParserTestCase {
- private final AlgorithmSegment algorithmSegment;
+ @XmlElement(name = "heartbeat")
+ private final List<ExpectedDatabaseDiscoveryHeartbeat> heartbeats = new
LinkedList<>();
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/alter.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/alter.xml
index d9bec03..3ddb437 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/alter.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/alter.xml
@@ -165,6 +165,14 @@
</rule>
</alter-database-discovery-construction-rule>
+ <alter-database-discovery-heartbeat
sql-case-id="alter-database-discovery-heartbeat">
+ <rule heartbeat-name="mgr_heartbeat" >
+ <properties>
+ <property key="keepAliveCron" value="0/5 * * * * ?"/>
+ </properties>
+ </rule>
+ </alter-database-discovery-heartbeat>
+
<alter-encrypt-rule sql-case-id="alter-encrypt-rule">
<rule name="t_encrypt">
<column name="user_id" plain-column="user_plain"
cipher-column="user_cipher">
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
index 98fca92..7c7735a 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
@@ -224,6 +224,15 @@
</type>
</create-database-discovery-type>
+
+ <create-database-discovery-heartbeat
sql-case-id="create-database-discovery-heartbeat">
+ <rule heartbeat-name="mgr_heartbeat" >
+ <properties>
+ <property key="keepAliveCron" value="0/5 * * * * ?"/>
+ </properties>
+ </rule>
+ </create-database-discovery-heartbeat>
+
<create-database-discovery-definition-rule
sql-case-id="create-database-discovery-rule-with-quota">
<rule rule-name="ha_group_0" type="mgr">
<data-source>resource0</data-source>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
index 3e74625..24153ab 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
@@ -33,6 +33,7 @@
<distsql-case id="alter-readwrite-splitting-rule" value="ALTER
READWRITE_SPLITTING RULE ms_group_0 (AUTO_AWARE_RESOURCE=group_0,
TYPE(NAME=random,PROPERTIES(read_weight='2:1'))), ms_group_1
(WRITE_RESOURCE=primary_ds,
READ_RESOURCES(replica_ds_0,replica_ds_1),TYPE(NAME=random))" />
<distsql-case id="alter-database-discovery-definition-rule" value="ALTER
DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1),
TYPE(NAME=mgr,PROPERTIES(groupName='92504d5b-6dec')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/5
* * * * ?'))), ha_group_1 (RESOURCES(resource2,resource3),
TYPE(NAME=mgr2,PROPERTIES(groupName='92504d5b-6dec-2')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/6
* * * * ?')))" />
<distsql-case id="alter-database-discovery-construction-rule" value="ALTER
DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1),
TYPE=ha_group_0_mgr,HEARTBEAT=ha_group_0_heartbeat)" />
+ <distsql-case id="alter-database-discovery-heartbeat" value="ALTER
DB_DISCOVERY HEARTBEAT mgr_heartbeat(PROPERTIES('keepAliveCron'='0/5 * * * *
?'))" />
<distsql-case id="alter-encrypt-rule" value="ALTER ENCRYPT RULE t_encrypt
(RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
<distsql-case id="alter-encrypt-rule-with-assisted-query-column"
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id,
CIPHER =order_cipher,TYPE(NAME=MD5))))" />
<distsql-case id="alter-encrypt-rule-with-query-with-cipher-column"
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, CIPHER
=order_cipher,TYPE(NAME=MD5))), QUERY_WITH_CIPHER_COLUMN=false)" />
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
index a95ebad..4d1f178 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
@@ -35,6 +35,7 @@
<distsql-case id="create-database-discovery-definition-rule" value="CREATE
DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1),
TYPE(NAME=mgr,PROPERTIES(groupName='92504d5b-6dec')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/5
* * * * ?'))), ha_group_1 (RESOURCES(resource2,resource3),
TYPE(NAME=mgr2,PROPERTIES(groupName='92504d5b-6dec-2')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/6
* * * * ?')))" />
<distsql-case id="create-database-discovery-construction-rule"
value="CREATE DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1),
TYPE=ha_group_0_mgr,HEARTBEAT=ha_group_0_heartbeat)" />
<distsql-case id="create-database-discovery-type" value="CREATE
DB_DISCOVERY TYPE
primary_replica_ds_mgr(TYPE(NAME=mgr,PROPERTIES('groupName'='92504d5b-6dec'))),primary_replica_ds_mgr_2(TYPE(NAME=mgr))"
/>
+ <distsql-case id="create-database-discovery-heartbeat" value="CREATE
DB_DISCOVERY HEARTBEAT mgr_heartbeat(PROPERTIES('keepAliveCron'='0/5 * * * *
?'))" />
<distsql-case id="create-encrypt-rule" value="CREATE ENCRYPT RULE
t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
<distsql-case id="create-encrypt-rule-with-assisted-query-column"
value="CREATE ENCRYPT RULE t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id,
CIPHER =order_cipher,TYPE(NAME=MD5))))" />
<distsql-case id="create-shadow-rule" value="CREATE SHADOW RULE
shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME=COLUMN_REGEX_MATCH,PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_note_algorithm,TYPE(NAME=SIMPLE_NOTE,PROPERTIES('shadow'='true',foo='bar')))))"
/>