You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2022/10/25 14:02:47 UTC
[shardingsphere] branch master updated: Refactor distsql about shadow related syntax #21696 (#21704)
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 135206de1dd Refactor distsql about shadow related syntax #21696 (#21704)
135206de1dd is described below
commit 135206de1dd6ef833a48d877e07128cf2c91167c
Author: jiangML <10...@qq.com>
AuthorDate: Tue Oct 25 22:02:31 2022 +0800
Refactor distsql about shadow related syntax #21696 (#21704)
* refactor distsql about shadow related syntax
* optimize code
* update doc about shadow
* imporve distsql about shadow
* add test
* format code
* optimize code
* optimize code
---
.../syntax/rdl/rule-definition/shadow.cn.md | 23 ++---
.../syntax/rdl/rule-definition/shadow.en.md | 25 +++---
.../distsql/feature/shadow/ShadowExecutor.java | 18 +---
.../DefaultShadowAlgorithmQueryResultSet.java | 84 +++++++++++++++++++
...lterDefaultShadowAlgorithmStatementUpdater.java | 97 ++++++++++++++++++++++
.../update/AlterShadowRuleStatementUpdater.java | 22 ++++-
...eateDefaultShadowAlgorithmStatementUpdater.java | 49 +++++++++--
.../update/CreateShadowRuleStatementUpdater.java | 25 ++++--
...dingsphere.infra.distsql.query.DistSQLResultSet | 1 +
...here.infra.distsql.update.RuleDefinitionUpdater | 1 +
.../AlterShadowRuleStatementUpdaterTest.java | 4 +-
...DefaultShadowAlgorithmStatementUpdaterTest.java | 29 +++++--
.../CreateShadowRuleStatementUpdaterTest.java | 9 +-
.../src/main/antlr4/imports/shadow/RDLStatement.g4 | 16 ++--
.../src/main/antlr4/imports/shadow/RQLStatement.g4 | 4 +
.../parser/autogen/ShadowDistSQLStatement.g4 | 4 +-
.../parser/core/ShadowDistSQLStatementVisitor.java | 77 +++++++++++------
.../shadow/distsql/parser/ShadowDistSQLTest.java | 6 +-
...a => AlterDefaultShadowAlgorithmStatement.java} | 9 +-
.../CreateDefaultShadowAlgorithmStatement.java | 3 +-
...va => ShowDefaultShadowAlgorithmStatement.java} | 13 +--
.../common/constant/DistSQLScriptConstants.java | 4 +-
.../resources/expected/convert-add-resource.yaml | 2 +-
.../resources/expected/convert-create-encrypt.yaml | 2 +-
.../resources/expected/convert-create-shadow.yaml | 8 +-
.../expected/convert-create-sharding.yaml | 2 +-
.../expected/convert-database-discovery.yaml | 2 +-
.../expected/convert-readwrite-splitting.yaml | 2 +-
.../rdl/alter/AlterRuleStatementAssert.java | 5 ++
...lterDefaultShadowAlgorithmStatementAssert.java} | 25 +++---
...reateDefaultShadowAlgorithmStatementAssert.java | 13 ++-
.../jaxb/cases/domain/SQLParserTestCases.java | 16 ++--
...erDefaultShadowAlgorithmStatementTestCase.java} | 15 ++--
...ateDefaultShadowAlgorithmStatementTestCase.java | 9 +-
...wDefaultShadowAlgorithmsStatementTestCase.java} | 17 +---
test/parser/src/main/resources/case/rdl/alter.xml | 10 +--
test/parser/src/main/resources/case/rdl/create.xml | 16 ++--
test/parser/src/main/resources/case/rql/show.xml | 4 +
.../src/main/resources/sql/supported/rdl/alter.xml | 4 +-
.../main/resources/sql/supported/rdl/create.xml | 7 +-
.../src/main/resources/sql/supported/rql/show.xml | 1 +
41 files changed, 481 insertions(+), 202 deletions(-)
diff --git a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.cn.md b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.cn.md
index 9b23611e396..4d1b52fcfcd 100644
--- a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.cn.md
+++ b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.cn.md
@@ -10,15 +10,17 @@ CREATE SHADOW RULE shadowRuleDefinition [, shadowRuleDefinition] ...
ALTER SHADOW RULE shadowRuleDefinition [, shadowRuleDefinition] ...
-CREATE SHADOW ALGORITHM shadowAlgorithm [, shadowAlgorithm] ...
-
-ALTER SHADOW ALGORITHM shadowAlgorithm [, shadowAlgorithm] ...
-
DROP SHADOW RULE ruleName [, ruleName] ...
DROP SHADOW ALGORITHM algorithmName [, algorithmName] ...
-CREATE DEFAULT SHADOW ALGORITHM NAME = algorithmName
+CREATE DEFAULT SHADOW ALGORITHM shadowAlgorithm
+
+ALTER DEFAULT SHADOW ALGORITHM shadowAlgorithm
+
+SHOW DEFAULT SHADOW ALGORITHM
+
+SHOW SHADOW ALGORITHMS
shadowRuleDefinition: ruleName(resourceMapping, shadowTableRule [, shadowTableRule] ...)
@@ -68,18 +70,11 @@ SHADOW=demo_ds_shadow,
t_order((simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("operation"="insert","column"="user_id", "regex"='[1]')))),
t_order_item((TYPE(NAME="VALUE_MATCH", PROPERTIES("operation"="insert","column"="user_id", "value"='1')))));
-CREATE SHADOW ALGORITHM
-(simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar"))),
-(user_id_match_algorithm, TYPE(NAME="REGEX_MATCH",PROPERTIES("operation"="insert", "column"="user_id", "regex"='[1]')));
-
+CREATE DEFAULT SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar")));
-ALTER SHADOW ALGORITHM
-(simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="false", "foo"="bar"))),
-(user_id_match_algorithm, TYPE(NAME="VALUE_MATCH",PROPERTIES("operation"="insert", "column"="user_id", "value"='1')));
+ALTER DEFAULT SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="false", "foo"="bar")));
DROP SHADOW RULE shadow_rule;
DROP SHADOW ALGORITHM simple_hint_algorithm;
-
-CREATE DEFAULT SHADOW ALGORITHM NAME = simple_hint_algorithm;
```
diff --git a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.en.md b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.en.md
index 2699f871479..638ca33b757 100644
--- a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.en.md
+++ b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/shadow.en.md
@@ -10,15 +10,17 @@ CREATE SHADOW RULE shadowRuleDefinition [, shadowRuleDefinition] ...
ALTER SHADOW RULE shadowRuleDefinition [, shadowRuleDefinition] ...
-CREATE SHADOW ALGORITHM shadowAlgorithm [, shadowAlgorithm] ...
-
-ALTER SHADOW ALGORITHM shadowAlgorithm [, shadowAlgorithm] ...
-
DROP SHADOW RULE ruleName [, ruleName] ...
DROP SHADOW ALGORITHM algorithmName [, algorithmName] ...
+
+CREATE DEFAULT SHADOW ALGORITHM shadowAlgorithm
+
+ALTER DEFAULT SHADOW ALGORITHM shadowAlgorithm
+
+SHOW DEFAULT SHADOW ALGORITHM
-CREATE DEFAULT SHADOW ALGORITHM NAME = algorithmName
+SHOW SHADOW ALGORITHMS
shadowRuleDefinition: ruleName(resourceMapping, shadowTableRule [, shadowTableRule] ...)
@@ -68,18 +70,11 @@ SHADOW=demo_ds_shadow,
t_order((simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("operation"="insert","column"="user_id", "regex"='[1]')))),
t_order_item((TYPE(NAME="VALUE_MATCH", PROPERTIES("operation"="insert","column"="user_id", "value"='1')))));
-CREATE SHADOW ALGORITHM
-(simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar"))),
-(user_id_match_algorithm, TYPE(NAME="REGEX_MATCH",PROPERTIES("operation"="insert", "column"="user_id", "regex"='[1]')));
-
-
-ALTER SHADOW ALGORITHM
-(simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="false", "foo"="bar"))),
-(user_id_match_algorithm, TYPE(NAME="VALUE_MATCH",PROPERTIES("operation"="insert", "column"="user_id", "value"='1')));
+CREATE DEFAULT SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="true", "foo"="bar")));
+ALTER DEFAULT SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME="SIMPLE_HINT", PROPERTIES("shadow"="false", "foo"="bar")));
+
DROP SHADOW RULE shadow_rule;
DROP SHADOW ALGORITHM simple_hint_algorithm;
-
-CREATE DEFAULT SHADOW ALGORITHM NAME = simple_hint_algorithm;
```
diff --git a/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/shadow/ShadowExecutor.java b/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/shadow/ShadowExecutor.java
index 51b4b4c2f6d..8a5c58a6a8e 100644
--- a/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/shadow/ShadowExecutor.java
+++ b/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/shadow/ShadowExecutor.java
@@ -34,18 +34,14 @@ public final class ShadowExecutor extends AbstractFeatureExecutor {
private static final String ADD_RULE = "CREATE SHADOW RULE shadow_rule(\n" +
"SOURCE=ds_0,\n" +
"SHADOW=ds_1,\n" +
- "t_order((simple_hint_algorithm, TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", foo=\"bar\"))),(TYPE(NAME=REGEX_MATCH, PROPERTIES(\"operation\"=\"insert\",\"column\"=\"user_id\", \"regex\"='[1]')))), \n" +
- "t_order_item((TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\")))));";
+ "t_order(TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", foo=\"bar\")),TYPE(NAME=REGEX_MATCH, PROPERTIES(\"operation\"=\"insert\",\"column\"=\"user_id\", \"regex\"='[1]'))), \n" +
+ "t_order_item(TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\"))));";
private static final String ALTER_RULE = "ALTER SHADOW RULE shadow_rule(\n" +
"SOURCE=ds_1,\n" +
"SHADOW=ds_0,\n" +
- "t_order((simple_hint_algorithm, TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", foo=\"bar\"))),(TYPE(NAME=REGEX_MATCH, PROPERTIES(\"operation\"=\"insert\",\"column\"=\"user_id\", \"regex\"='[1]')))), \n" +
- "t_order_item((TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\")))))";
-
- private static final String ALTER_ALGORITHM = "ALTER SHADOW ALGORITHM \n" +
- "(simple_hint_algorithm, TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\"))), \n" +
- "(shadow_rule_t_order_regex_match, TYPE(NAME=REGEX_MATCH,PROPERTIES(\"operation\"=\"insert\", \"column\"=\"user_id\", \"regex\"='[1]')))";
+ "t_order(TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", foo=\"bar\")),TYPE(NAME=REGEX_MATCH, PROPERTIES(\"operation\"=\"insert\",\"column\"=\"user_id\", \"regex\"='[1]'))), \n" +
+ "t_order_item(TYPE(NAME=SIMPLE_HINT, PROPERTIES(\"shadow\"=\"true\", \"foo\"=\"bar\"))))";
private static final String DROP_RULE = "DROP SHADOW RULE shadow_rule";
@@ -71,7 +67,6 @@ public final class ShadowExecutor extends AbstractFeatureExecutor {
executeShowTableRule();
executeShowAlgorithm();
executeAlterRule();
- executeAlterAlgorithm();
executeShowRule();
executeShowTableRule();
executeShowAlgorithm();
@@ -110,11 +105,6 @@ public final class ShadowExecutor extends AbstractFeatureExecutor {
statement.execute(ALTER_RULE);
}
- private void executeAlterAlgorithm() throws SQLException {
- log.info("alter algorithm...");
- statement.execute(ALTER_ALGORITHM);
- }
-
private void executeDropRule() throws SQLException {
log.info("drop rule...");
statement.execute(DROP_RULE);
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/DefaultShadowAlgorithmQueryResultSet.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/DefaultShadowAlgorithmQueryResultSet.java
new file mode 100644
index 00000000000..20721c4cbd2
--- /dev/null
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/DefaultShadowAlgorithmQueryResultSet.java
@@ -0,0 +1,84 @@
+/*
+ * 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.shadow.distsql.handler.query;
+
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.distsql.query.DatabaseDistSQLResultSet;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.props.PropertiesConverter;
+import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowDefaultShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.rule.ShadowRule;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+/**
+ * Query result set for default shadow algorithm.
+ */
+public final class DefaultShadowAlgorithmQueryResultSet implements DatabaseDistSQLResultSet {
+
+ private Iterator<Entry<String, AlgorithmConfiguration>> data = Collections.emptyIterator();
+
+ @Override
+ public void init(final ShardingSphereDatabase database, final SQLStatement sqlStatement) {
+ Optional<ShadowRule> rule = database.getRuleMetaData().findSingleRule(ShadowRule.class);
+ if (rule.isPresent()) {
+ ShadowRuleConfiguration config = (ShadowRuleConfiguration) rule.get().getConfiguration();
+ String defaultAlgorithm = config.getDefaultShadowAlgorithmName();
+ data = config.getShadowAlgorithms().entrySet().stream().filter(each -> each.getKey().equals(defaultAlgorithm))
+ .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (v1, v2) -> v2)).entrySet().iterator();
+ }
+ }
+
+ @Override
+ public Collection<String> getColumnNames() {
+ return Arrays.asList("shadow_algorithm_name", "type", "props");
+ }
+
+ @Override
+ public boolean next() {
+ return data.hasNext();
+ }
+
+ @Override
+ public Collection<Object> getRowData() {
+ return buildTableRowData(data.next());
+ }
+
+ private Collection<Object> buildTableRowData(final Entry<String, AlgorithmConfiguration> data) {
+ return Arrays.asList(data.getKey(), data.getValue().getType(), convertToString(data.getValue().getProps()));
+ }
+
+ private String convertToString(final Properties props) {
+ return Objects.nonNull(props) ? PropertiesConverter.convert(props) : "";
+ }
+
+ @Override
+ public String getType() {
+ return ShowDefaultShadowAlgorithmStatement.class.getName();
+ }
+}
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmStatementUpdater.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmStatementUpdater.java
new file mode 100644
index 00000000000..452a9228312
--- /dev/null
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmStatementUpdater.java
@@ -0,0 +1,97 @@
+/*
+ * 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.shadow.distsql.handler.update;
+
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
+import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionAlterUpdater;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
+import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+import org.apache.shardingsphere.shadow.distsql.handler.checker.ShadowRuleStatementChecker;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterDefaultShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * Alter default shadow algorithm statement updater.
+ */
+public class AlterDefaultShadowAlgorithmStatementUpdater implements RuleDefinitionAlterUpdater<AlterDefaultShadowAlgorithmStatement, ShadowRuleConfiguration> {
+
+ private static final String SHADOW = "shadow";
+
+ private static final String DEFAULT_ALGORITHM_NAME = "default";
+
+ @Override
+ public RuleConfiguration buildToBeAlteredRuleConfiguration(final AlterDefaultShadowAlgorithmStatement sqlStatement) {
+ ShadowRuleConfiguration result = new ShadowRuleConfiguration();
+ result.setShadowAlgorithms(buildAlgorithmMap(sqlStatement));
+ result.setDefaultShadowAlgorithmName(DEFAULT_ALGORITHM_NAME);
+ return result;
+ }
+
+ private Map<String, AlgorithmConfiguration> buildAlgorithmMap(final AlterDefaultShadowAlgorithmStatement sqlStatement) {
+ return Collections.singletonMap(DEFAULT_ALGORITHM_NAME, new AlgorithmConfiguration(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName(),
+ sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getProps()));
+ }
+
+ @Override
+ public void updateCurrentRuleConfiguration(final ShadowRuleConfiguration currentRuleConfig, final ShadowRuleConfiguration toBeAlteredRuleConfig) {
+ currentRuleConfig.getShadowAlgorithms().putAll(toBeAlteredRuleConfig.getShadowAlgorithms());
+ currentRuleConfig.setDefaultShadowAlgorithmName(toBeAlteredRuleConfig.getDefaultShadowAlgorithmName());
+ }
+
+ @Override
+ public void checkSQLStatement(final ShardingSphereDatabase database, final AlterDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
+ checkExist(database.getName(), sqlStatement, currentRuleConfig);
+ checkAlgorithmCompleteness(Collections.singleton(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment()));
+ checkAlgorithmType(sqlStatement);
+ }
+
+ private void checkExist(final String databaseName, final AlterDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
+ ShadowRuleStatementChecker.checkConfigurationExist(databaseName, currentRuleConfig);
+ }
+
+ private void checkAlgorithmType(final AlterDefaultShadowAlgorithmStatement sqlStatement) {
+ String shadowAlgorithmType = sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName();
+ ShardingSpherePreconditions.checkState(ShadowAlgorithmFactory.contains(shadowAlgorithmType),
+ () -> new InvalidAlgorithmConfigurationException(SHADOW, shadowAlgorithmType));
+ }
+
+ private static void checkAlgorithmCompleteness(final Collection<AlgorithmSegment> algorithmSegments) {
+ Set<AlgorithmSegment> incompleteAlgorithms = algorithmSegments.stream().filter(each -> each.getName().isEmpty() || each.getProps().isEmpty()).collect(Collectors.toSet());
+ ShardingSpherePreconditions.checkState(incompleteAlgorithms.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW));
+ }
+
+ @Override
+ public Class<ShadowRuleConfiguration> getRuleConfigurationClass() {
+ return ShadowRuleConfiguration.class;
+ }
+
+ @Override
+ public String getType() {
+ return AlterDefaultShadowAlgorithmStatement.class.getName();
+ }
+}
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleStatementUpdater.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleStatementUpdater.java
index 600bec38534..68ef37c45cc 100644
--- a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleStatementUpdater.java
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleStatementUpdater.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.shadow.distsql.handler.update;
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
import org.apache.shardingsphere.infra.distsql.exception.rule.AlgorithmInUsedException;
@@ -24,6 +25,7 @@ import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleExcep
import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionAlterUpdater;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
import org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
import org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
@@ -33,9 +35,12 @@ import org.apache.shardingsphere.shadow.distsql.handler.supporter.ShadowRuleStat
import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowRuleStatement;
+import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
import java.util.Collection;
import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* Alter shadow rule statement updater.
@@ -72,7 +77,9 @@ public final class AlterShadowRuleStatementUpdater implements RuleDefinitionAlte
checkConfigurationExist(databaseName, currentRuleConfig);
checkRuleNames(databaseName, rules, currentRuleConfig);
checkResources(database, rules);
- checkAlgorithms(databaseName, rules);
+ checkAlgorithmCompleteness(sqlStatement);
+ checkAlgorithms(databaseName, sqlStatement.getRules());
+ checkAlgorithmType(sqlStatement);
}
private void checkConfigurationExist(final String databaseName, final DatabaseRuleConfiguration currentRuleConfig) {
@@ -91,6 +98,19 @@ public final class AlterShadowRuleStatementUpdater implements RuleDefinitionAlte
ShadowRuleStatementChecker.checkResourceExist(requireResource, database);
}
+ private static void checkAlgorithmCompleteness(final AlterShadowRuleStatement sqlStatement) {
+ Collection<AlgorithmSegment> algorithmSegments = sqlStatement.getRules().stream().flatMap(each -> each.getShadowTableRules().values().stream()).flatMap(Collection::stream)
+ .map(ShadowAlgorithmSegment::getAlgorithmSegment).collect(Collectors.toList());
+ Set<AlgorithmSegment> incompleteAlgorithms = algorithmSegments.stream().filter(each -> each.getName().isEmpty() || each.getProps().isEmpty()).collect(Collectors.toSet());
+ ShardingSpherePreconditions.checkState(incompleteAlgorithms.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW));
+ }
+
+ private void checkAlgorithmType(final AlterShadowRuleStatement sqlStatement) {
+ Collection<String> nonexistentAlgorithmTypes = sqlStatement.getRules().stream().flatMap(each -> each.getShadowTableRules().values().stream()).flatMap(Collection::stream)
+ .map(each -> each.getAlgorithmSegment().getName()).collect(Collectors.toSet()).stream().filter(each -> !ShadowAlgorithmFactory.contains(each)).collect(Collectors.toSet());
+ ShardingSpherePreconditions.checkState(nonexistentAlgorithmTypes.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW, nonexistentAlgorithmTypes));
+ }
+
private void checkAlgorithms(final String databaseName, final Collection<ShadowRuleSegment> rules) {
Collection<ShadowAlgorithmSegment> shadowAlgorithmSegment = ShadowRuleStatementSupporter.getShadowAlgorithmSegment(rules);
ShadowRuleStatementChecker.checkAlgorithmCompleteness(shadowAlgorithmSegment);
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
index 44f0148f05e..f8b12b22906 100644
--- a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
@@ -17,42 +17,75 @@
package org.apache.shardingsphere.shadow.distsql.handler.update;
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.distsql.exception.rule.MissingRequiredAlgorithmException;
+import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateAlgorithmException;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionCreateUpdater;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+import org.apache.shardingsphere.shadow.distsql.handler.checker.ShadowRuleStatementChecker;
import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
+import java.util.Collection;
import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* Create default shadow algorithm statement updater.
*/
public final class CreateDefaultShadowAlgorithmStatementUpdater implements RuleDefinitionCreateUpdater<CreateDefaultShadowAlgorithmStatement, ShadowRuleConfiguration> {
+ private static final String SHADOW = "shadow";
+
+ private static final String DEFAULT_ALGORITHM_NAME = "default";
+
@Override
public RuleConfiguration buildToBeCreatedRuleConfiguration(final CreateDefaultShadowAlgorithmStatement sqlStatement) {
ShadowRuleConfiguration result = new ShadowRuleConfiguration();
- result.setDefaultShadowAlgorithmName(sqlStatement.getAlgorithmName());
+ result.setShadowAlgorithms(buildAlgorithmMap(sqlStatement));
+ result.setDefaultShadowAlgorithmName(DEFAULT_ALGORITHM_NAME);
return result;
}
+ private Map<String, AlgorithmConfiguration> buildAlgorithmMap(final CreateDefaultShadowAlgorithmStatement sqlStatement) {
+ return Collections.singletonMap(DEFAULT_ALGORITHM_NAME, new AlgorithmConfiguration(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName(),
+ sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getProps()));
+ }
+
@Override
public void updateCurrentRuleConfiguration(final ShadowRuleConfiguration currentRuleConfig, final ShadowRuleConfiguration toBeCreatedRuleConfig) {
+ currentRuleConfig.getShadowAlgorithms().putAll(toBeCreatedRuleConfig.getShadowAlgorithms());
currentRuleConfig.setDefaultShadowAlgorithmName(toBeCreatedRuleConfig.getDefaultShadowAlgorithmName());
}
@Override
- public void checkSQLStatement(final ShardingSphereDatabase database,
- final CreateDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
- checkAlgorithmExist(database.getName(), sqlStatement, currentRuleConfig);
+ public void checkSQLStatement(final ShardingSphereDatabase database, final CreateDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
+ checkExist(database.getName(), sqlStatement, currentRuleConfig);
+ checkAlgorithmCompleteness(Collections.singleton(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment()));
+ checkAlgorithmType(sqlStatement);
+ }
+
+ private void checkExist(final String databaseName, final CreateDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
+ Collection<String> requireAlgorithmNames = Collections.singleton(DEFAULT_ALGORITHM_NAME);
+ Collection<String> currentAlgorithmNames = null == currentRuleConfig ? Collections.emptyList() : currentRuleConfig.getShadowAlgorithms().keySet();
+ ShadowRuleStatementChecker.checkAnyDuplicate(requireAlgorithmNames, currentAlgorithmNames, different -> new DuplicateAlgorithmException(SHADOW, databaseName, different));
+ }
+
+ private void checkAlgorithmType(final CreateDefaultShadowAlgorithmStatement sqlStatement) {
+ String shadowAlgorithmType = sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName();
+ ShardingSpherePreconditions.checkState(ShadowAlgorithmFactory.contains(shadowAlgorithmType),
+ () -> new InvalidAlgorithmConfigurationException(SHADOW, shadowAlgorithmType));
}
- private void checkAlgorithmExist(final String databaseName, final CreateDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
- ShardingSpherePreconditions.checkState(currentRuleConfig.getShadowAlgorithms().containsKey(sqlStatement.getAlgorithmName()),
- () -> new MissingRequiredAlgorithmException(databaseName, Collections.singleton(sqlStatement.getAlgorithmName())));
+ private static void checkAlgorithmCompleteness(final Collection<AlgorithmSegment> algorithmSegments) {
+ Set<AlgorithmSegment> incompleteAlgorithms = algorithmSegments.stream().filter(each -> each.getName().isEmpty() || each.getProps().isEmpty()).collect(Collectors.toSet());
+ ShardingSpherePreconditions.checkState(incompleteAlgorithms.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW));
}
@Override
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
index dba61dbc00c..476461455b8 100644
--- a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
@@ -19,8 +19,10 @@ package org.apache.shardingsphere.shadow.distsql.handler.update;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionCreateUpdater;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
import org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
import org.apache.shardingsphere.shadow.distsql.handler.checker.ShadowRuleStatementChecker;
@@ -29,9 +31,11 @@ import org.apache.shardingsphere.shadow.distsql.handler.supporter.ShadowRuleStat
import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateShadowRuleStatement;
+import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
import java.util.Collection;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* Create shadow rule statement updater.
@@ -64,7 +68,8 @@ public final class CreateShadowRuleStatementUpdater implements RuleDefinitionCre
Collection<ShadowRuleSegment> rules = sqlStatement.getRules();
checkRuleNames(databaseName, rules, currentRuleConfig);
checkResources(database, rules);
- checkAlgorithms(databaseName, rules, currentRuleConfig);
+ checkAlgorithms(databaseName, sqlStatement.getRules());
+ checkAlgorithmType(sqlStatement);
}
private void checkRuleNames(final String databaseName, final Collection<ShadowRuleSegment> rules, final ShadowRuleConfiguration currentRuleConfig) {
@@ -79,13 +84,17 @@ public final class CreateShadowRuleStatementUpdater implements RuleDefinitionCre
ShadowRuleStatementChecker.checkResourceExist(requireResource, database);
}
- private void checkAlgorithms(final String databaseName, final Collection<ShadowRuleSegment> rules, final ShadowRuleConfiguration currentRuleConfig) {
- Collection<ShadowAlgorithmSegment> requireAlgorithms = ShadowRuleStatementSupporter.getShadowAlgorithmSegment(rules);
- ShadowRuleStatementChecker.checkAlgorithmCompleteness(requireAlgorithms);
- Collection<String> requireAlgorithmNames = ShadowRuleStatementSupporter.getAlgorithmNames(rules);
- ShadowRuleStatementChecker.checkAnyDuplicate(requireAlgorithmNames, duplicated -> new DuplicateRuleException(SHADOW, databaseName, duplicated));
- Collection<String> currentAlgorithmNames = ShadowRuleStatementSupporter.getAlgorithmNames(currentRuleConfig);
- ShadowRuleStatementChecker.checkAnyDuplicate(requireAlgorithmNames, currentAlgorithmNames, duplicated -> new DuplicateRuleException(SHADOW, databaseName, duplicated));
+ private void checkAlgorithms(final String databaseName, final Collection<ShadowRuleSegment> rules) {
+ Collection<ShadowAlgorithmSegment> shadowAlgorithmSegment = ShadowRuleStatementSupporter.getShadowAlgorithmSegment(rules);
+ ShadowRuleStatementChecker.checkAlgorithmCompleteness(shadowAlgorithmSegment);
+ Collection<String> requireAlgorithms = ShadowRuleStatementSupporter.getAlgorithmNames(rules);
+ ShadowRuleStatementChecker.checkAnyDuplicate(requireAlgorithms, duplicated -> new DuplicateRuleException("Shadow", databaseName, duplicated));
+ }
+
+ private void checkAlgorithmType(final CreateShadowRuleStatement sqlStatement) {
+ Collection<String> nonexistentAlgorithmTypes = sqlStatement.getRules().stream().flatMap(each -> each.getShadowTableRules().values().stream()).flatMap(Collection::stream)
+ .map(each -> each.getAlgorithmSegment().getName()).collect(Collectors.toSet()).stream().filter(each -> !ShadowAlgorithmFactory.contains(each)).collect(Collectors.toSet());
+ ShardingSpherePreconditions.checkState(nonexistentAlgorithmTypes.isEmpty(), () -> new InvalidAlgorithmConfigurationException(SHADOW, nonexistentAlgorithmTypes));
}
@Override
diff --git a/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet b/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
index 494f9d53d34..9bd5ccc0983 100644
--- a/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
+++ b/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.query.DistSQLResultSet
@@ -17,5 +17,6 @@
org.apache.shardingsphere.shadow.distsql.handler.query.ShadowRuleQueryResultSet
org.apache.shardingsphere.shadow.distsql.handler.query.ShadowAlgorithmQueryResultSet
+org.apache.shardingsphere.shadow.distsql.handler.query.DefaultShadowAlgorithmQueryResultSet
org.apache.shardingsphere.shadow.distsql.handler.query.ShadowTableRuleQueryResultSet
org.apache.shardingsphere.shadow.distsql.handler.query.CountShadowRuleQueryResultSet
diff --git a/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater b/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
index 6e3d296d1af..f05f48c1095 100644
--- a/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
+++ b/features/shadow/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater
@@ -20,6 +20,7 @@ org.apache.shardingsphere.shadow.distsql.handler.update.CreateShadowRuleStatemen
org.apache.shardingsphere.shadow.distsql.handler.update.DropShadowAlgorithmStatementUpdater
org.apache.shardingsphere.shadow.distsql.handler.update.AlterShadowRuleStatementUpdater
org.apache.shardingsphere.shadow.distsql.handler.update.CreateDefaultShadowAlgorithmStatementUpdater
+org.apache.shardingsphere.shadow.distsql.handler.update.AlterDefaultShadowAlgorithmStatementUpdater
org.apache.shardingsphere.shadow.distsql.handler.update.AlterShadowAlgorithmStatementUpdater
org.apache.shardingsphere.shadow.distsql.handler.update.CreateShadowAlgorithmStatementUpdater
org.apache.shardingsphere.shadow.distsql.handler.update.DropDefaultShadowAlgorithmStatementUpdater
diff --git a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/AlterShadowRuleStatementUpdaterTest.java b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/AlterShadowRuleStatementUpdaterTest.java
index 98c77535679..ac6d9247c73 100644
--- a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/AlterShadowRuleStatementUpdaterTest.java
+++ b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/AlterShadowRuleStatementUpdaterTest.java
@@ -121,8 +121,8 @@ public final class AlterShadowRuleStatementUpdaterTest {
public void assertExecuteSuccess() {
Properties prop = new Properties();
prop.setProperty("type", "value");
- ShadowAlgorithmSegment segment1 = new ShadowAlgorithmSegment("algorithmName1", new AlgorithmSegment("name", prop));
- ShadowAlgorithmSegment segment2 = new ShadowAlgorithmSegment("algorithmName2", new AlgorithmSegment("name", prop));
+ ShadowAlgorithmSegment segment1 = new ShadowAlgorithmSegment("algorithmName1", new AlgorithmSegment("SIMPLE_HINT", prop));
+ ShadowAlgorithmSegment segment2 = new ShadowAlgorithmSegment("algorithmName2", new AlgorithmSegment("SIMPLE_HINT", prop));
AlterShadowRuleStatement sqlStatement = createSQLStatement(new ShadowRuleSegment("initRuleName1", "ds", null, Collections.singletonMap("t_order", Collections.singleton(segment1))),
new ShadowRuleSegment("initRuleName2", "ds1", null, Collections.singletonMap("t_order_1", Collections.singletonList(segment2))));
updater.checkSQLStatement(database, sqlStatement, currentConfig);
diff --git a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateDefaultShadowAlgorithmStatementUpdaterTest.java b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateDefaultShadowAlgorithmStatementUpdaterTest.java
index b7bb24b0fb3..ba204899234 100644
--- a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateDefaultShadowAlgorithmStatementUpdaterTest.java
+++ b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateDefaultShadowAlgorithmStatementUpdaterTest.java
@@ -17,10 +17,12 @@
package org.apache.shardingsphere.shadow.distsql.update;
-import org.apache.shardingsphere.infra.distsql.exception.rule.MissingRequiredAlgorithmException;
+import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
import org.apache.shardingsphere.shadow.distsql.handler.update.CreateDefaultShadowAlgorithmStatementUpdater;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -28,8 +30,9 @@ import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import java.util.Collections;
+import java.util.Properties;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
@@ -43,9 +46,23 @@ public final class CreateDefaultShadowAlgorithmStatementUpdaterTest {
private final CreateDefaultShadowAlgorithmStatementUpdater updater = new CreateDefaultShadowAlgorithmStatementUpdater();
- @Test(expected = MissingRequiredAlgorithmException.class)
- public void assertExecuteWithNotExistAlgorithm() {
- when(currentConfig.getShadowAlgorithms()).thenReturn(Collections.singletonMap("default_name", null));
- updater.checkSQLStatement(database, new CreateDefaultShadowAlgorithmStatement("input_default_name"), currentConfig);
+ @Test(expected = InvalidAlgorithmConfigurationException.class)
+ public void assertExecuteWithInvalidAlgorithm() {
+ Properties prop = new Properties();
+ prop.setProperty("type", "value");
+ CreateDefaultShadowAlgorithmStatement statement = mock(CreateDefaultShadowAlgorithmStatement.class);
+ ShadowAlgorithmSegment shadowAlgorithmSegment = new ShadowAlgorithmSegment("algorithmName", new AlgorithmSegment("name", prop));
+ when(statement.getShadowAlgorithmSegment()).thenReturn(shadowAlgorithmSegment);
+ updater.checkSQLStatement(database, statement, currentConfig);
+ }
+
+ @Test
+ public void assertExecuteSuccess() {
+ Properties prop = new Properties();
+ prop.setProperty("type", "value");
+ CreateDefaultShadowAlgorithmStatement statement = mock(CreateDefaultShadowAlgorithmStatement.class);
+ ShadowAlgorithmSegment shadowAlgorithmSegment = new ShadowAlgorithmSegment("algorithmName", new AlgorithmSegment("SIMPLE_HINT", prop));
+ when(statement.getShadowAlgorithmSegment()).thenReturn(shadowAlgorithmSegment);
+ updater.checkSQLStatement(database, statement, currentConfig);
}
}
diff --git a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateShadowRuleStatementUpdaterTest.java b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateShadowRuleStatementUpdaterTest.java
index fefb8ab4225..32bd27aa2e7 100644
--- a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateShadowRuleStatementUpdaterTest.java
+++ b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/CreateShadowRuleStatementUpdaterTest.java
@@ -18,9 +18,9 @@
package org.apache.shardingsphere.shadow.distsql.update;
import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.distsql.exception.resource.MissingRequiredResourcesException;
import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResourceMetaData;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
@@ -91,7 +91,7 @@ public final class CreateShadowRuleStatementUpdaterTest {
prop.setProperty("type", "value");
ShadowAlgorithmSegment segment = new ShadowAlgorithmSegment("algorithmName", new AlgorithmSegment("name", prop));
CreateShadowRuleStatement sqlStatement = createSQLStatement(new ShadowRuleSegment("ruleName", "ds", null, Collections.singletonMap("t_order", Collections.singleton(segment))),
- new ShadowRuleSegment("ruleName1", "ds1", null, Collections.singletonMap("t_order_1", Collections.singletonList(segment))));
+ new ShadowRuleSegment("ruleName", "ds1", null, Collections.singletonMap("t_order_1", Collections.singletonList(segment))));
updater.checkSQLStatement(database, sqlStatement, currentConfig);
}
@@ -105,11 +105,10 @@ public final class CreateShadowRuleStatementUpdaterTest {
updater.checkSQLStatement(database, sqlStatement, null);
}
- @Test(expected = DuplicateRuleException.class)
- public void assertExecuteDuplicateAlgorithmInMetaData() {
+ @Test(expected = InvalidAlgorithmConfigurationException.class)
+ public void assertInvalidAlgorithmConfiguration() {
Properties prop = new Properties();
prop.setProperty("type", "value");
- when(currentConfig.getShadowAlgorithms()).thenReturn(Collections.singletonMap("algorithmName", new AlgorithmConfiguration("type", prop)));
ShadowAlgorithmSegment segment = new ShadowAlgorithmSegment("algorithmName", new AlgorithmSegment("type", prop));
CreateShadowRuleStatement sqlStatement = createSQLStatement(new ShadowRuleSegment("ruleName", "ds", null, Collections.singletonMap("t_order", Collections.singleton(segment))));
updater.checkSQLStatement(database, sqlStatement, currentConfig);
diff --git a/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RDLStatement.g4 b/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RDLStatement.g4
index 8194d1a8f9d..660c9921eab 100644
--- a/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RDLStatement.g4
+++ b/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RDLStatement.g4
@@ -30,27 +30,23 @@ alterShadowRule
dropShadowRule
: DROP SHADOW RULE ifExists? ruleName (COMMA ruleName)*
;
-
-createShadowAlgorithm
- : CREATE SHADOW ALGORITHM shadowAlgorithmDefinition (COMMA shadowAlgorithmDefinition)*
- ;
-
-alterShadowAlgorithm
- : ALTER SHADOW ALGORITHM shadowAlgorithmDefinition (COMMA shadowAlgorithmDefinition)*
- ;
dropShadowAlgorithm
: DROP SHADOW ALGORITHM ifExists? algorithmName (COMMA algorithmName)*
;
createDefaultShadowAlgorithm
- : CREATE DEFAULT SHADOW ALGORITHM NAME EQ algorithmName
+ : CREATE DEFAULT SHADOW ALGORITHM shadowAlgorithmDefinition
;
dropDefaultShadowAlgorithm
: DROP DEFAULT SHADOW ALGORITHM ifExists?
;
+alterDefaultShadowAlgorithm
+ : ALTER DEFAULT SHADOW ALGORITHM shadowAlgorithmDefinition
+ ;
+
shadowRuleDefinition
: ruleName LP SOURCE EQ source COMMA SHADOW EQ shadow COMMA shadowTableRule (COMMA shadowTableRule)* RP
;
@@ -72,7 +68,7 @@ tableName
;
shadowAlgorithmDefinition
- : LP (algorithmName COMMA) ? TYPE LP NAME EQ shadowAlgorithmType COMMA PROPERTIES LP algorithmProperties RP RP RP
+ : TYPE LP NAME EQ shadowAlgorithmType COMMA PROPERTIES LP algorithmProperties RP RP
;
algorithmName
diff --git a/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RQLStatement.g4 b/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RQLStatement.g4
index 82db23c2d70..292e8b17cd2 100644
--- a/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RQLStatement.g4
+++ b/features/shadow/distsql/parser/src/main/antlr4/imports/shadow/RQLStatement.g4
@@ -31,6 +31,10 @@ showShadowAlgorithms
: SHOW SHADOW ALGORITHMS (FROM databaseName)?
;
+showDefaultShadowAlgorithm
+ : SHOW DEFAULT SHADOW ALGORITHM (FROM databaseName)?
+ ;
+
shadowRule
: RULE ruleName
;
diff --git a/features/shadow/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShadowDistSQLStatement.g4 b/features/shadow/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShadowDistSQLStatement.g4
index 32639581d27..4f9210c23d6 100644
--- a/features/shadow/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShadowDistSQLStatement.g4
+++ b/features/shadow/distsql/parser/src/main/antlr4/org/apache/shardingsphere/distsql/parser/autogen/ShadowDistSQLStatement.g4
@@ -26,11 +26,11 @@ execute
| showShadowRules
| showShadowTableRules
| showShadowAlgorithms
+ | showDefaultShadowAlgorithm
| dropShadowAlgorithm
| dropDefaultShadowAlgorithm
| createDefaultShadowAlgorithm
- | alterShadowAlgorithm
- | createShadowAlgorithm
+ | alterDefaultShadowAlgorithm
| countShadowRule
) SEMI?
;
diff --git a/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java b/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
index 22bc6b24f57..a6d11423262 100644
--- a/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
+++ b/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
@@ -20,11 +20,10 @@ package org.apache.shardingsphere.shadow.distsql.parser.core;
import org.antlr.v4.runtime.ParserRuleContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementBaseVisitor;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.AlgorithmPropertiesContext;
-import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.AlterShadowAlgorithmContext;
+import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.AlterDefaultShadowAlgorithmContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.AlterShadowRuleContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.CountShadowRuleContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.CreateDefaultShadowAlgorithmContext;
-import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.CreateShadowAlgorithmContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.CreateShadowRuleContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.DatabaseNameContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.DropDefaultShadowAlgorithmContext;
@@ -32,22 +31,22 @@ import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementPa
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.DropShadowRuleContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShadowAlgorithmDefinitionContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShadowRuleDefinitionContext;
-import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShadowTableRuleContext;
+import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShowDefaultShadowAlgorithmContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShowShadowAlgorithmsContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShowShadowRulesContext;
import org.apache.shardingsphere.distsql.parser.autogen.ShadowDistSQLStatementParser.ShowShadowTableRulesContext;
import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
-import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterDefaultShadowAlgorithmStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowRuleStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.CountShadowRuleStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
-import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateShadowAlgorithmStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateShadowRuleStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.DropDefaultShadowAlgorithmStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.DropShadowAlgorithmStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.DropShadowRuleStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowDefaultShadowAlgorithmStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowShadowAlgorithmsStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowShadowRulesStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.ShowShadowTableRulesStatement;
@@ -58,6 +57,8 @@ import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.Identifi
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -72,12 +73,17 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
@Override
public ASTNode visitCreateShadowRule(final CreateShadowRuleContext ctx) {
List<ShadowRuleSegment> shadowRuleSegments = ctx.shadowRuleDefinition().stream().map(this::visit).map(each -> (ShadowRuleSegment) each).collect(Collectors.toList());
- return new CreateShadowRuleStatement(shadowRuleSegments);
+ return new CreateShadowRuleStatement(autoCreateAlgorithmName(shadowRuleSegments));
}
@Override
public ASTNode visitCreateDefaultShadowAlgorithm(final CreateDefaultShadowAlgorithmContext ctx) {
- return new CreateDefaultShadowAlgorithmStatement(getIdentifierValue(ctx.algorithmName()));
+ return new CreateDefaultShadowAlgorithmStatement((ShadowAlgorithmSegment) visit(ctx.shadowAlgorithmDefinition()));
+ }
+
+ @Override
+ public ASTNode visitAlterDefaultShadowAlgorithm(final AlterDefaultShadowAlgorithmContext ctx) {
+ return new AlterDefaultShadowAlgorithmStatement((ShadowAlgorithmSegment) visit(ctx.shadowAlgorithmDefinition()));
}
@Override
@@ -92,14 +98,15 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
return new ShowShadowAlgorithmsStatement(null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
}
+ @Override
+ public ASTNode visitShowDefaultShadowAlgorithm(final ShowDefaultShadowAlgorithmContext ctx) {
+ return new ShowDefaultShadowAlgorithmStatement(null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+ }
+
@Override
public ASTNode visitShadowAlgorithmDefinition(final ShadowAlgorithmDefinitionContext ctx) {
AlgorithmSegment segment = new AlgorithmSegment(getIdentifierValue(ctx.shadowAlgorithmType()), getAlgorithmProperties(ctx.algorithmProperties()));
- String algorithmName = null == ctx.algorithmName()
- ? createAlgorithmName(getIdentifierValue(((ShadowRuleDefinitionContext) ctx.getParent().getParent()).ruleName()),
- getIdentifierValue(((ShadowTableRuleContext) ctx.getParent()).tableName()), segment)
- : getIdentifierValue(ctx.algorithmName());
- return new ShadowAlgorithmSegment(algorithmName, segment);
+ return new ShadowAlgorithmSegment(null, segment);
}
private Properties getAlgorithmProperties(final AlgorithmPropertiesContext ctx) {
@@ -110,12 +117,8 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
@Override
public ASTNode visitAlterShadowRule(final AlterShadowRuleContext ctx) {
- return new AlterShadowRuleStatement(ctx.shadowRuleDefinition().stream().map(this::visit).map(each -> (ShadowRuleSegment) each).collect(Collectors.toList()));
- }
-
- @Override
- public ASTNode visitCreateShadowAlgorithm(final CreateShadowAlgorithmContext ctx) {
- return new CreateShadowAlgorithmStatement(visitShadowAlgorithms(ctx.shadowAlgorithmDefinition()));
+ List<ShadowRuleSegment> shadowRuleSegments = ctx.shadowRuleDefinition().stream().map(this::visit).map(each -> (ShadowRuleSegment) each).collect(Collectors.toList());
+ return new AlterShadowRuleStatement(autoCreateAlgorithmName(shadowRuleSegments));
}
@Override
@@ -123,11 +126,6 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
return new DropShadowRuleStatement(null != ctx.ifExists(), ctx.ruleName().stream().map(each -> new IdentifierValue(each.getText()).getValue()).collect(Collectors.toList()));
}
- @Override
- public ASTNode visitAlterShadowAlgorithm(final AlterShadowAlgorithmContext ctx) {
- return new AlterShadowAlgorithmStatement(visitShadowAlgorithms(ctx.shadowAlgorithmDefinition()));
- }
-
@Override
public ASTNode visitDropShadowAlgorithm(final DropShadowAlgorithmContext ctx) {
return new DropShadowAlgorithmStatement(null != ctx.ifExists(), null == ctx.algorithmName()
@@ -160,10 +158,6 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
return ctxs.stream().map(this::visit).map(each -> (ShadowAlgorithmSegment) each).collect(Collectors.toList());
}
- private String createAlgorithmName(final String ruleName, final String tableName, final AlgorithmSegment algorithmSegment) {
- return String.format("%s_%s_%s", ruleName, tableName, algorithmSegment.getName()).toLowerCase();
- }
-
@Override
public ASTNode visitDatabaseName(final DatabaseNameContext ctx) {
return new DatabaseSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), new IdentifierValue(ctx.getText()));
@@ -173,4 +167,33 @@ public final class ShadowDistSQLStatementVisitor extends ShadowDistSQLStatementB
public ASTNode visitCountShadowRule(final CountShadowRuleContext ctx) {
return new CountShadowRuleStatement(Objects.nonNull(ctx.databaseName()) ? (DatabaseSegment) visit(ctx.databaseName()) : null);
}
+
+ private static Collection<ShadowRuleSegment> autoCreateAlgorithmName(final Collection<ShadowRuleSegment> shadowRuleSegments) {
+ Collection<ShadowRuleSegment> newShadowRuleSegments = new LinkedList<>();
+ shadowRuleSegments.forEach(each -> buildShadowRuleSegment(newShadowRuleSegments, each));
+ return newShadowRuleSegments;
+ }
+
+ private static void buildShadowRuleSegment(final Collection<ShadowRuleSegment> collection, final ShadowRuleSegment shadowRuleSegment) {
+ Map<String, Collection<ShadowAlgorithmSegment>> shadowTableRules = new LinkedHashMap<>();
+ shadowRuleSegment.getShadowTableRules().forEach((key, value) -> {
+ int index = 0;
+ Collection<ShadowAlgorithmSegment> shadowAlgorithmSegments = new LinkedList<>();
+ for (ShadowAlgorithmSegment shadowAlgorithmSegment : value) {
+ shadowAlgorithmSegments.add(buildShadowAlgorithmSegment(shadowRuleSegment.getRuleName(), key, index++, shadowAlgorithmSegment));
+ }
+ shadowTableRules.put(key, shadowAlgorithmSegments);
+ });
+ collection.add(new ShadowRuleSegment(shadowRuleSegment.getRuleName(), shadowRuleSegment.getSource(), shadowRuleSegment.getShadow(), shadowTableRules));
+ }
+
+ private static ShadowAlgorithmSegment buildShadowAlgorithmSegment(final String ruleName, final String tableName, final Integer index, final ShadowAlgorithmSegment shadowAlgorithmSegment) {
+ String algorithmName = buildAlgorithmName(ruleName, tableName, shadowAlgorithmSegment.getAlgorithmSegment().getName(), index);
+ AlgorithmSegment algorithmSegment = new AlgorithmSegment(shadowAlgorithmSegment.getAlgorithmSegment().getName(), shadowAlgorithmSegment.getAlgorithmSegment().getProps());
+ return new ShadowAlgorithmSegment(algorithmName, algorithmSegment);
+ }
+
+ private static String buildAlgorithmName(final String ruleName, final String tableName, final String algorithmType, final Integer index) {
+ return String.format("%s_%s_%s_%d", ruleName, tableName, algorithmType, index).toLowerCase();
+ }
}
diff --git a/features/shadow/distsql/parser/src/test/java/org/apache/shardingsphere/shadow/distsql/parser/ShadowDistSQLTest.java b/features/shadow/distsql/parser/src/test/java/org/apache/shardingsphere/shadow/distsql/parser/ShadowDistSQLTest.java
index 477cd412379..1fde612735f 100644
--- a/features/shadow/distsql/parser/src/test/java/org/apache/shardingsphere/shadow/distsql/parser/ShadowDistSQLTest.java
+++ b/features/shadow/distsql/parser/src/test/java/org/apache/shardingsphere/shadow/distsql/parser/ShadowDistSQLTest.java
@@ -40,7 +40,7 @@ public final class ShadowDistSQLTest {
@Test
public void assertCreateShadowRule() {
- String sql = "CREATE SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))";
+ String sql = "CREATE SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))";
CreateShadowRuleStatement shadowDistSQLStatement = (CreateShadowRuleStatement) getShadowDistSQLStatement(sql);
assertThat(shadowDistSQLStatement.getRules().size(), is(1));
assertShadowRuleSegment(shadowDistSQLStatement.getRules().iterator().next());
@@ -48,7 +48,7 @@ public final class ShadowDistSQLTest {
@Test
public void assertAlterShadowRule() {
- String sql = "ALTER SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))";
+ String sql = "ALTER SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))";
AlterShadowRuleStatement shadowDistSQLStatement = (AlterShadowRuleStatement) getShadowDistSQLStatement(sql);
assertThat(shadowDistSQLStatement.getRules().size(), is(1));
assertShadowRuleSegment(shadowDistSQLStatement.getRules().iterator().next());
@@ -61,7 +61,7 @@ public final class ShadowDistSQLTest {
assertThat(shadowRuleSegment.getShadowTableRules().size(), is(1));
assertThat(shadowRuleSegment.getShadowTableRules().containsKey("t_order"), is(true));
ShadowAlgorithmSegment shadowAlgorithmSegment = shadowRuleSegment.getShadowTableRules().get("t_order").iterator().next();
- assertThat(shadowAlgorithmSegment.getAlgorithmName(), is("simple_hint_algorithm"));
+ assertThat(shadowAlgorithmSegment.getAlgorithmName(), is("shadow_rule_t_order_simple_hint_0"));
assertThat(shadowAlgorithmSegment.getAlgorithmSegment().getName(), is("SIMPLE_HINT"));
Properties properties = new Properties();
properties.setProperty("shadow", "true");
diff --git a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterDefaultShadowAlgorithmStatement.java
similarity index 72%
copy from features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
copy to features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterDefaultShadowAlgorithmStatement.java
index fde6f86ae05..d12bc6510d3 100644
--- a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
+++ b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterDefaultShadowAlgorithmStatement.java
@@ -19,14 +19,15 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
/**
- * Create default shadow algorithm rule statement.
+ * Alter default shadow algorithm rule statement.
*/
@RequiredArgsConstructor
@Getter
-public final class CreateDefaultShadowAlgorithmStatement extends CreateRuleStatement {
+public class AlterDefaultShadowAlgorithmStatement extends AlterRuleStatement {
- private final String algorithmName;
+ private final ShadowAlgorithmSegment shadowAlgorithmSegment;
}
diff --git a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
index fde6f86ae05..e463c6b7370 100644
--- a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
+++ b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
/**
* Create default shadow algorithm rule statement.
@@ -28,5 +29,5 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleS
@Getter
public final class CreateDefaultShadowAlgorithmStatement extends CreateRuleStatement {
- private final String algorithmName;
+ private final ShadowAlgorithmSegment shadowAlgorithmSegment;
}
diff --git a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowDefaultShadowAlgorithmStatement.java
similarity index 68%
copy from features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
copy to features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowDefaultShadowAlgorithmStatement.java
index fde6f86ae05..b2d42aa15e6 100644
--- a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
+++ b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowDefaultShadowAlgorithmStatement.java
@@ -18,15 +18,16 @@
package org.apache.shardingsphere.shadow.distsql.parser.statement;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
/**
- * Create default shadow algorithm rule statement.
+ * Show default shadow algorithm statement.
*/
-@RequiredArgsConstructor
@Getter
-public final class CreateDefaultShadowAlgorithmStatement extends CreateRuleStatement {
+public final class ShowDefaultShadowAlgorithmStatement extends ShowRulesStatement {
- private final String algorithmName;
+ public ShowDefaultShadowAlgorithmStatement(final DatabaseSegment database) {
+ super(database);
+ }
}
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
index 970f96e5378..315acf6df2a 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/constant/DistSQLScriptConstants.java
@@ -52,7 +52,7 @@ public final class DistSQLScriptConstants {
public static final String USE_DATABASE = "USE %s;";
- public static final String ADD_RESOURCE = "ADD RESOURCE";
+ public static final String ADD_RESOURCE = "REGISTER STORAGE UNIT";
public static final String KEY_URL = "url";
@@ -196,5 +196,5 @@ public final class DistSQLScriptConstants {
public static final String SHADOW_TABLE = "%s(%s)";
- public static final String SHADOW_TABLE_TYPE = "(TYPE(NAME=\"%s\", PROPERTIES(%s)))";
+ public static final String SHADOW_TABLE_TYPE = "TYPE(NAME=\"%s\", PROPERTIES(%s))";
}
diff --git a/proxy/backend/src/test/resources/expected/convert-add-resource.yaml b/proxy/backend/src/test/resources/expected/convert-add-resource.yaml
index 6373de98bfd..ec5f87d9cc7 100644
--- a/proxy/backend/src/test/resources/expected/convert-add-resource.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-add-resource.yaml
@@ -17,7 +17,7 @@
CREATE DATABASE resource_db;
USE resource_db;
-ADD RESOURCE ds_0 (
+REGISTER STORAGE UNIT ds_0 (
URL="jdbc:mysql://127.0.0.1:3306/demo_resource_ds_0?serverTimezone=UTC&useSSL=false",
USER="root",
PASSWORD="12345678",
diff --git a/proxy/backend/src/test/resources/expected/convert-create-encrypt.yaml b/proxy/backend/src/test/resources/expected/convert-create-encrypt.yaml
index 65029b2ca8c..67791b5630e 100644
--- a/proxy/backend/src/test/resources/expected/convert-create-encrypt.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-create-encrypt.yaml
@@ -17,7 +17,7 @@
CREATE DATABASE encrypt_db;
USE encrypt_db;
-ADD RESOURCE ds_0 (
+REGISTER STORAGE UNIT ds_0 (
URL="jdbc:mysql://127.0.0.1:3306/demo_encrypt_ds_0?serverTimezone=UTC&useSSL=false",
USER="root",
PASSWORD="12345678",
diff --git a/proxy/backend/src/test/resources/expected/convert-create-shadow.yaml b/proxy/backend/src/test/resources/expected/convert-create-shadow.yaml
index bcf9a7d1009..e9349dd455a 100644
--- a/proxy/backend/src/test/resources/expected/convert-create-shadow.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-create-shadow.yaml
@@ -17,7 +17,7 @@
CREATE DATABASE shadow_db;
USE shadow_db;
-ADD RESOURCE ds (
+REGISTER STORAGE UNIT ds (
URL="jdbc:mysql://127.0.0.1:3306/demo_shadow_ds_0?serverTimezone=UTC&useSSL=false",
USER="root",
PASSWORD="12345678",
@@ -31,7 +31,7 @@ PROPERTIES("minPoolSize"="1","connectionTimeoutMilliseconds"="30000","maxLifetim
CREATE SHADOW RULE shadowDataSource(
SOURCE=ds,
SHADOW=shadow_ds,
-t_order((TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]")))),
-t_order_item((TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="update","regex"="[1]"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]")))),
-t_address((TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]"))),(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]"))),(TYPE(NAME="SIMPLE_HINT", PROPERTIES("foo"="bar"))))
+t_order(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]")),TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]"))),
+t_order_item(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]")),TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="update","regex"="[1]")),TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]"))),
+t_address(TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="insert","regex"="[1]")),TYPE(NAME="REGEX_MATCH", PROPERTIES("column"="user_id","operation"="select","regex"="[1]")),TYPE(NAME="SIMPLE_HINT", PROPERTIES("foo"="bar")))
);
diff --git a/proxy/backend/src/test/resources/expected/convert-create-sharding.yaml b/proxy/backend/src/test/resources/expected/convert-create-sharding.yaml
index ac54a9e640b..47f771397e6 100644
--- a/proxy/backend/src/test/resources/expected/convert-create-sharding.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-create-sharding.yaml
@@ -17,7 +17,7 @@
CREATE DATABASE sharding_db;
USE sharding_db;
-ADD RESOURCE ds_0 (
+REGISTER STORAGE UNIT ds_0 (
URL="jdbc:mysql://127.0.0.1:3306/demo_sharding_ds_0?serverTimezone=UTC&useSSL=false",
USER="root",
PASSWORD="12345678",
diff --git a/proxy/backend/src/test/resources/expected/convert-database-discovery.yaml b/proxy/backend/src/test/resources/expected/convert-database-discovery.yaml
index 05c79442bf6..026418d5710 100644
--- a/proxy/backend/src/test/resources/expected/convert-database-discovery.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-database-discovery.yaml
@@ -17,7 +17,7 @@
CREATE DATABASE database_discovery_db;
USE database_discovery_db;
-ADD RESOURCE ds_0 (
+REGISTER STORAGE UNIT ds_0 (
URL="jdbc:mysql://127.0.0.1:3306/demo_primary_ds_0?serverTimezone=UTC&useSSL=false",
USER="root",
PASSWORD="12345678",
diff --git a/proxy/backend/src/test/resources/expected/convert-readwrite-splitting.yaml b/proxy/backend/src/test/resources/expected/convert-readwrite-splitting.yaml
index 8a467130867..2f1a33d6a41 100644
--- a/proxy/backend/src/test/resources/expected/convert-readwrite-splitting.yaml
+++ b/proxy/backend/src/test/resources/expected/convert-readwrite-splitting.yaml
@@ -17,7 +17,7 @@
CREATE DATABASE readwrite_splitting_db;
USE readwrite_splitting_db;
-ADD RESOURCE write_ds_0 (
+REGISTER STORAGE UNIT write_ds_0 (
URL="jdbc:mysql://127.0.0.1:3306/demo_write_ds_0?serverTimezone=UTC&useSSL=false",
USER="root",
PASSWORD="12345678",
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
index 654bf848387..a99a94bc1a7 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/AlterRuleStatementAssert.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterDefault
import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
import org.apache.shardingsphere.encrypt.distsql.parser.statement.AlterEncryptRuleStatement;
import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.AlterReadwriteSplittingRuleStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterDefaultShadowAlgorithmStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowAlgorithmStatement;
import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterShadowRuleStatement;
import org.apache.shardingsphere.sharding.distsql.parser.statement.AlterDefaultShardingStrategyStatement;
@@ -35,6 +36,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAs
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.AlterDatabaseDiscoveryRuleStatementAssert;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDatabaseDiscoveryTypeStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDefaultShadowAlgorithmStatementAssert;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl.AlterDefaultShardingStrategyStatementAssert;
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;
@@ -57,6 +59,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.alter.AlterShardingAuditorStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingBindingTableRulesStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingKeyGeneratorStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.AlterDefaultShadowAlgorithmStatementTestCase;
/**
* Alter rule statement assert.
@@ -98,6 +101,8 @@ public final class AlterRuleStatementAssert {
AlterShardingKeyGeneratorStatementAssert.assertIs(assertContext, (AlterShardingKeyGeneratorStatement) actual, (AlterShardingKeyGeneratorStatementTestCase) expected);
} else if (actual instanceof AlterShardingAuditorStatement) {
AlterShardingAuditorStatementAssert.assertIs(assertContext, (AlterShardingAuditorStatement) actual, (AlterShardingAuditorStatementTestCase) expected);
+ } else if (actual instanceof AlterDefaultShadowAlgorithmStatement) {
+ AlterDefaultShadowAlgorithmStatementAssert.assertIs(assertContext, (AlterDefaultShadowAlgorithmStatement) actual, (AlterDefaultShadowAlgorithmStatementTestCase) expected);
}
}
}
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDefaultShadowAlgorithmStatementAssert.java
similarity index 61%
copy from test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
copy to test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDefaultShadowAlgorithmStatementAssert.java
index d30164140af..2d746529ac9 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/alter/impl/AlterDefaultShadowAlgorithmStatementAssert.java
@@ -15,24 +15,25 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.create.impl;
+package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.alter.impl;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
+import org.apache.shardingsphere.shadow.distsql.parser.statement.AlterDefaultShadowAlgorithmStatement;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShadowAlgorithmStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.distsql.AlgorithmAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.AlterDefaultShadowAlgorithmStatementTestCase;
-import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
/**
- * Create default shadow algorithm statement assert.
+ * Alter default shadow algorithm statement assert.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class CreateDefaultShadowAlgorithmStatementAssert {
+public class AlterDefaultShadowAlgorithmStatementAssert {
/**
* Assert create default shadow algorithm statement is correct with expected parser result.
@@ -41,13 +42,17 @@ public final class CreateDefaultShadowAlgorithmStatementAssert {
* @param actual actual create default shadow algorithm statement
* @param expected expected create default shadow algorithm statement test case
*/
- public static void assertIs(final SQLCaseAssertContext assertContext, final CreateDefaultShadowAlgorithmStatement actual, final CreateDefaultShadowAlgorithmStatementTestCase expected) {
+ public static void assertIs(final SQLCaseAssertContext assertContext, final AlterDefaultShadowAlgorithmStatement actual, final AlterDefaultShadowAlgorithmStatementTestCase expected) {
if (null == expected) {
assertNull(assertContext.getText("Actual statement should not exist."), actual);
} else {
assertNotNull(assertContext.getText("Actual statement should exist."), actual);
- assertThat(assertContext.getText(String.format("`%s`'s algorithm name assertion error: ", actual.getClass().getSimpleName())),
- actual.getAlgorithmName(), is(expected.getAlgorithmName()));
+ expected.getRules().forEach(each -> assertIsAlgorithmsSegment(assertContext, actual.getShadowAlgorithmSegment(), each));
}
}
+
+ private static void assertIsAlgorithmsSegment(final SQLCaseAssertContext assertContext, final ShadowAlgorithmSegment actual, final ExpectedShadowAlgorithm expected) {
+ assertNotNull(actual);
+ AlgorithmAssert.assertIs(assertContext, actual.getAlgorithmSegment(), expected.getAlgorithmSegment());
+ }
}
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
index d30164140af..a06d3432c06 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
@@ -19,14 +19,15 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
import org.apache.shardingsphere.shadow.distsql.parser.statement.CreateDefaultShadowAlgorithmStatement;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.distsql.AlgorithmAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateDefaultShadowAlgorithmStatementTestCase;
-import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
/**
* Create default shadow algorithm statement assert.
@@ -46,8 +47,12 @@ public final class CreateDefaultShadowAlgorithmStatementAssert {
assertNull(assertContext.getText("Actual statement should not exist."), actual);
} else {
assertNotNull(assertContext.getText("Actual statement should exist."), actual);
- assertThat(assertContext.getText(String.format("`%s`'s algorithm name assertion error: ", actual.getClass().getSimpleName())),
- actual.getAlgorithmName(), is(expected.getAlgorithmName()));
+ expected.getRules().forEach(each -> assertIsAlgorithmsSegment(assertContext, actual.getShadowAlgorithmSegment(), each));
}
}
+
+ private static void assertIsAlgorithmsSegment(final SQLCaseAssertContext assertContext, final ShadowAlgorithmSegment actual, final ExpectedShadowAlgorithm expected) {
+ assertNotNull(actual);
+ AlgorithmAssert.assertIs(assertContext, actual.getAlgorithmSegment(), expected.getAlgorithmSegment());
+ }
}
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
index 12a14163b98..c26644e21c1 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
@@ -334,7 +334,6 @@ 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.alter.AlterEncryptRuleStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterReadwriteSplittingRuleStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterResourceStatementTestCase;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShadowAlgorithmStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShadowRuleStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingAlgorithmStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingAuditorStatementTestCase;
@@ -343,6 +342,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.alter.AlterShardingKeyGeneratorStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.alter.AlterShardingTableRuleStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.AddResourceStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.AlterDefaultShadowAlgorithmStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateBroadcastTableRuleStatementTestCase;
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.CreateDefaultShadowAlgorithmStatementTestCase;
@@ -350,7 +350,6 @@ 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.CreateDefaultSingleTableRuleStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateEncryptRuleStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateReadwriteSplittingRuleStatementTestCase;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateShadowAlgorithmStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateShadowRuleStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateShardingAlgorithmStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create.CreateShardingAuditorStatementTestCase;
@@ -381,6 +380,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.rql.CountSingleTableRuleStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowBroadcastTableRulesStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowDataBaseDiscoveryRulesStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowDefaultShadowAlgorithmsStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowDefaultShardingStrategyStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowEncryptRulesStatementTestCase;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql.ShowReadwriteSplittingRulesStatementTestCase;
@@ -1069,18 +1069,15 @@ public final class SQLParserTestCases {
@XmlElement(name = "alter-shadow-rule")
private final List<AlterShadowRuleStatementTestCase> alterShadowRuleTestCases = new LinkedList<>();
- @XmlElement(name = "alter-shadow-algorithm")
- private final List<AlterShadowAlgorithmStatementTestCase> alterShadowAlgorithmTestCases = new LinkedList<>();
-
- @XmlElement(name = "create-shadow-algorithm")
- private final List<CreateShadowAlgorithmStatementTestCase> createShadowAlgorithmTestCases = new LinkedList<>();
-
@XmlElement(name = "show-shadow-rules")
private final List<ShowShadowRulesStatementTestCase> showShadowRulesTestCases = new LinkedList<>();
@XmlElement(name = "show-shadow-algorithms")
private final List<ShowShadowAlgorithmsStatementTestCase> showShadowAlgorithmsTestCases = new LinkedList<>();
+ @XmlElement(name = "show-default-shadow-algorithm")
+ private final List<ShowDefaultShadowAlgorithmsStatementTestCase> showDefaultShadowAlgorithmsTestCases = new LinkedList<>();
+
@XmlElement(name = "show-shadow-table-rules")
private final List<ShowShadowTableRulesStatementTestCase> showShadowTableRulesTestCases = new LinkedList<>();
@@ -1165,6 +1162,9 @@ public final class SQLParserTestCases {
@XmlElement(name = "create-default-shadow-algorithm")
private final List<CreateDefaultShadowAlgorithmStatementTestCase> createDefaultShadowAlgorithmTestCases = new LinkedList<>();
+ @XmlElement(name = "alter-default-shadow-algorithm")
+ private final List<AlterDefaultShadowAlgorithmStatementTestCase> alterDefaultShadowAlgorithmTestCases = new LinkedList<>();
+
@XmlElement(name = "show-replicas")
private final List<ShowReplicasStatementTestCase> showReplicasTestCases = new LinkedList<>();
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/AlterDefaultShadowAlgorithmStatementTestCase.java
similarity index 68%
copy from test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
copy to test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/AlterDefaultShadowAlgorithmStatementTestCase.java
index edef175af47..e2e894b5928 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/AlterDefaultShadowAlgorithmStatementTestCase.java
@@ -18,18 +18,19 @@
package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create;
import lombok.Getter;
-import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
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.Collection;
+import java.util.LinkedList;
/**
- * Create default shadow algorithm statement test case.
+ * Alter default shadow algorithm statement test case.
*/
@Getter
-@Setter
-public final class CreateDefaultShadowAlgorithmStatementTestCase extends SQLParserTestCase {
+public class AlterDefaultShadowAlgorithmStatementTestCase extends SQLParserTestCase {
- @XmlAttribute(name = "algorithm")
- private String algorithmName;
+ @XmlElement(name = "shadow-algorithm")
+ private final Collection<ExpectedShadowAlgorithm> rules = new LinkedList<>();
}
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
index edef175af47..7fc44d719e3 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
@@ -19,9 +19,12 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
import lombok.Getter;
import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
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.Collection;
+import java.util.LinkedList;
/**
* Create default shadow algorithm statement test case.
@@ -30,6 +33,6 @@ import javax.xml.bind.annotation.XmlAttribute;
@Setter
public final class CreateDefaultShadowAlgorithmStatementTestCase extends SQLParserTestCase {
- @XmlAttribute(name = "algorithm")
- private String algorithmName;
+ @XmlElement(name = "shadow-algorithm")
+ private final Collection<ExpectedShadowAlgorithm> rules = new LinkedList<>();
}
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowDefaultShadowAlgorithmsStatementTestCase.java
similarity index 68%
copy from test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
copy to test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowDefaultShadowAlgorithmsStatementTestCase.java
index edef175af47..71b9c68fca1 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/create/CreateDefaultShadowAlgorithmStatementTestCase.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rql/ShowDefaultShadowAlgorithmsStatementTestCase.java
@@ -15,21 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.create;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rql;
-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 org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.DatabaseContainedTestCase;
/**
- * Create default shadow algorithm statement test case.
+ * Show default shadow algorithm statement test case.
*/
-@Getter
-@Setter
-public final class CreateDefaultShadowAlgorithmStatementTestCase extends SQLParserTestCase {
-
- @XmlAttribute(name = "algorithm")
- private String algorithmName;
+public class ShowDefaultShadowAlgorithmsStatementTestCase extends DatabaseContainedTestCase {
}
diff --git a/test/parser/src/main/resources/case/rdl/alter.xml b/test/parser/src/main/resources/case/rdl/alter.xml
index 499c2b6bc10..94a2357fa37 100644
--- a/test/parser/src/main/resources/case/rdl/alter.xml
+++ b/test/parser/src/main/resources/case/rdl/alter.xml
@@ -199,7 +199,7 @@
<alter-shadow-rule sql-case-id="alter-shadow-rule">
<rule name="rule" rule-name="shadow_rule" source="demo_ds" shadow="demo_ds_shadow">
<table-rule table-name="t_order">
- <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match">
+ <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match_0">
<algorithm algorithm-name="REGEX_MATCH">
<properties>
<property key="operation" value="insert" />
@@ -208,7 +208,7 @@
</properties>
</algorithm>
</shadow-algorithm>
- <shadow-algorithm algorithm-id="simple_hint_algorithm">
+ <shadow-algorithm algorithm-id="shadow_rule_t_order_simple_hint_1">
<algorithm algorithm-name="SIMPLE_HINT">
<properties>
<property key="shadow" value="true" />
@@ -220,8 +220,8 @@
</rule>
</alter-shadow-rule>
- <alter-shadow-algorithm sql-case-id="alter-shadow-algorithm">
- <shadow-algorithm algorithm-id="simple_hint_algorithm">
+ <alter-default-shadow-algorithm sql-case-id="alter-default-shadow-algorithm">
+ <shadow-algorithm algorithm-id="default">
<algorithm algorithm-name="SIMPLE_HINT">
<properties>
<property key="shadow" value="true" />
@@ -229,7 +229,7 @@
</properties>
</algorithm>
</shadow-algorithm>
- </alter-shadow-algorithm>
+ </alter-default-shadow-algorithm>
<alter-sharding-algorithm sql-case-id="alter-sharding-algorithm">
<shardingAlgorithm sharding-algorithm-name="algorithm_name">
diff --git a/test/parser/src/main/resources/case/rdl/create.xml b/test/parser/src/main/resources/case/rdl/create.xml
index 9670fef1699..d91e6b942c3 100644
--- a/test/parser/src/main/resources/case/rdl/create.xml
+++ b/test/parser/src/main/resources/case/rdl/create.xml
@@ -323,7 +323,7 @@
<create-shadow-rule sql-case-id="create-shadow-rule">
<rule name="rule" rule-name="shadow_rule" source="demo_ds" shadow="demo_ds_shadow">
<table-rule table-name="t_order">
- <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match">
+ <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match_0">
<algorithm algorithm-name="REGEX_MATCH">
<properties>
<property key="operation" value="insert"/>
@@ -332,7 +332,7 @@
</properties>
</algorithm>
</shadow-algorithm>
- <shadow-algorithm algorithm-id="simple_hint_algorithm">
+ <shadow-algorithm algorithm-id="shadow_rule_t_order_simple_hint_1">
<algorithm algorithm-name="SIMPLE_HINT">
<properties>
<property key="shadow" value="true"/>
@@ -347,7 +347,7 @@
<create-shadow-rule sql-case-id="create-shadow-rule-with-quota">
<rule name="rule" rule-name="shadow_rule" source="demo_ds" shadow="demo_ds_shadow">
<table-rule table-name="t_order">
- <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match">
+ <shadow-algorithm algorithm-id="shadow_rule_t_order_regex_match_0">
<algorithm algorithm-name="REGEX_MATCH">
<properties>
<property key="operation" value="insert"/>
@@ -356,7 +356,7 @@
</properties>
</algorithm>
</shadow-algorithm>
- <shadow-algorithm algorithm-id="simple_hint_algorithm">
+ <shadow-algorithm algorithm-id="shadow_rule_t_order_simple_hint_1">
<algorithm algorithm-name="SIMPLE_HINT">
<properties>
<property key="shadow" value="true"/>
@@ -378,8 +378,6 @@
</shardingAlgorithm>
</create-sharding-algorithm>
- <create-default-shadow-algorithm sql-case-id="create-default-shadow-algorithm" algorithm="simple_hint_algorithm"/>
-
<create-default-sharding-strategy sql-case-id="create-default-sharding-table-strategy-with-lower-case">
<strategy default-type="table" strategy-type="standard" sharding-column="order_id" sharding-algorithm-name="algorithms_name">
</strategy>
@@ -395,8 +393,8 @@
</strategy>
</create-default-sharding-strategy>
- <create-shadow-algorithm sql-case-id="create-shadow-algorithm">
- <shadow-algorithm algorithm-id="simple_hint_algorithm">
+ <create-default-shadow-algorithm sql-case-id="create-default-shadow-algorithm">
+ <shadow-algorithm algorithm-id="default">
<algorithm algorithm-name="HINT">
<properties>
<property key="shadow" value="true"/>
@@ -404,7 +402,7 @@
</properties>
</algorithm>
</shadow-algorithm>
- </create-shadow-algorithm>
+ </create-default-shadow-algorithm>
<create-default-single-table sql-case-id="create-default-single-table" default-data-source="ds_0"/>
diff --git a/test/parser/src/main/resources/case/rql/show.xml b/test/parser/src/main/resources/case/rql/show.xml
index e98d6da67f6..41fe1849ff8 100644
--- a/test/parser/src/main/resources/case/rql/show.xml
+++ b/test/parser/src/main/resources/case/rql/show.xml
@@ -81,6 +81,10 @@
<show-shadow-algorithms sql-case-id="show-shadow-algorithms">
<database name="shadow_db" start-index="28" stop-index="36" />
</show-shadow-algorithms>
+
+ <show-default-shadow-algorithm sql-case-id="show-default-shadow-algorithm">
+ <database name="shadow_db" start-index="35" stop-index="43" />
+ </show-default-shadow-algorithm>
<show-single-table sql-case-id="show-single-table">
<name name="t_order" start-index="19" stop-index="25" />
diff --git a/test/parser/src/main/resources/sql/supported/rdl/alter.xml b/test/parser/src/main/resources/sql/supported/rdl/alter.xml
index 7f46c7a6a84..da268703d62 100644
--- a/test/parser/src/main/resources/sql/supported/rdl/alter.xml
+++ b/test/parser/src/main/resources/sql/supported/rdl/alter.xml
@@ -34,8 +34,8 @@
<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')), TYPE(NAME='MD5')), (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)" />
- <distsql-case id="alter-shadow-algorithm" value="ALTER SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME='SIMPLE_HINT', PROPERTIES('shadow'='true', 'foo'='bar')))" />
- <distsql-case id="alter-shadow-rule" value="ALTER SHADOW RULE shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))" />
+ <distsql-case id="alter-default-shadow-algorithm" value="ALTER DEFAULT SHADOW ALGORITHM TYPE(NAME='SIMPLE_HINT', PROPERTIES('shadow'='true', 'foo'='bar'))" />
+ <distsql-case id="alter-shadow-rule" value="ALTER SHADOW RULE shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))" />
<distsql-case id="alter-sharding-table-rule" value="ALTER SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column = order_id,sharding_algorithm = database_inline),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" />
<distsql-case id="alter-sharding-table-rule-complex" value="ALTER SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='complex',sharding_columns = order_id,user_id, sharding_algorithm = database_inline),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" />
<distsql-case id="alter-sharding-algorithm" value="ALTER SHARDING ALGORITHM algorithm_name(TYPE(NAME='inline',PROPERTIES('algorithm-expression' = 't_order_${order_id % 2}')))" />
diff --git a/test/parser/src/main/resources/sql/supported/rdl/create.xml b/test/parser/src/main/resources/sql/supported/rdl/create.xml
index a7d3e5ef879..523200a0f53 100644
--- a/test/parser/src/main/resources/sql/supported/rdl/create.xml
+++ b/test/parser/src/main/resources/sql/supported/rdl/create.xml
@@ -35,8 +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-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')), TYPE(NAME='MD5')), (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='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))" />
- <distsql-case id="create-default-shadow-algorithm" value="CREATE DEFAULT SHADOW ALGORITHM NAME = simple_hint_algorithm ;" />
+ <distsql-case id="create-shadow-rule" value="CREATE SHADOW RULE shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))" />
<distsql-case id="create-sharding-algorithm" value="CREATE SHARDING ALGORITHM algorithm_name(TYPE(NAME='hash_mod',PROPERTIES('algorithm-expression' = 't_order_${order_id % 2}')))" />
<distsql-case id="create-default-sharding-table-strategy-with-lower-case" value="create default sharding table strategy(type='standard', sharding_column=order_id, sharding_algorithm=algorithms_name)" />
<distsql-case id="create-default-sharding-database-strategy" value="CREATE DEFAULT SHARDING DATABASE STRATEGY(TYPE='STANDARD', SHARDING_COLUMN=ORDER_ID, SHARDING_ALGORITHM=algorithms_name)" />
@@ -45,7 +44,7 @@
<distsql-case id="create-sharding-table-rule-with-enum-inline-expression" value="CREATE SHARDING TABLE RULE t_order (DATANODES("ms_group_${['abc','ac']}.table " ),DATABASE_STRATEGY(TYPE='standard',sharding_column = order_id,sharding_algorithm = database_inline),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake'))),t_order_item (DATANODES('ms_group_${0..1}'),DATABASE_STRATE [...]
<distsql-case id="create-sharding-table-rule-complex" value="CREATE SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='complex',sharding_columns = order_id,user_id,sharding_algorithm = database_inline),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake'))),t_order_item (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column = o [...]
<distsql-case id="create-sharding-table-rule-with-auto-create-algorithm" value="CREATE SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column = order_id,sharding_algorithm (TYPE(NAME='inline',PROPERTIES('algorithm-expression'='ms_group_${order_id% 2}')))),TABLE_STRATEGY(TYPE='standard',sharding_column = user_id,sharding_algorithm = table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" />
- <distsql-case id="create-shadow-algorithm" value="CREATE SHADOW ALGORITHM (simple_hint_algorithm, TYPE(NAME='HINT', PROPERTIES('shadow'='true', 'foo'='bar')))" />
+ <distsql-case id="create-default-shadow-algorithm" value="CREATE DEFAULT SHADOW ALGORITHM TYPE(NAME='HINT', PROPERTIES('shadow'='true', 'foo'='bar'))" />
<distsql-case id="create-default-single-table" value="SET DEFAULT SINGLE TABLE STORAGE UNIT = ds_0" />
<distsql-case id="add-resource-with-quota" value="REGISTER STORAGE UNIT `ds_0`(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT');" />
@@ -56,7 +55,7 @@
<distsql-case id="create-database-discovery-rule-with-quota" 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-encrypt-rule-with-quota" value="CREATE ENCRYPT RULE `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-query-with-cipher-column" value="CREATE ENCRYPT RULE `encrypt` (RESOURCE=ds_1, COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))),QUERY_WITH_CIPHER_COLUMN=false)" />
- <distsql-case id="create-shadow-rule-with-quota" value="CREATE SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar')))))" />
+ <distsql-case id="create-shadow-rule-with-quota" value="CREATE SHADOW RULE `shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))" />
<distsql-case id="create-sharding-key-generator" value="CREATE SHARDING KEY GENERATOR uuid_key_generator(TYPE(NAME='uuid'))" />
<distsql-case id="create-sharding-auditor" value="CREATE SHARDING AUDITOR sharding_key_required_auditor(TYPE(NAME='DML_SHARDING_CONDITIONS'))" />
<distsql-case id="single-register-migration-source-storage-unit" value="REGISTER MIGRATION SOURCE STORAGE UNIT ds_0 (URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PASSWORD='123456');" />
diff --git a/test/parser/src/main/resources/sql/supported/rql/show.xml b/test/parser/src/main/resources/sql/supported/rql/show.xml
index f5cb8d14cf5..67457a300ff 100644
--- a/test/parser/src/main/resources/sql/supported/rql/show.xml
+++ b/test/parser/src/main/resources/sql/supported/rql/show.xml
@@ -33,6 +33,7 @@
<distsql-case id="show-shadow-rules" value="SHOW SHADOW RULE shadow_rule FROM shadow_db" />
<distsql-case id="show-shadow-table-rules" value="SHOW SHADOW TABLE RULES FROM shadow_db" />
<distsql-case id="show-shadow-algorithms" value="SHOW SHADOW ALGORITHMS FROM shadow_db" />
+ <distsql-case id="show-default-shadow-algorithm" value="SHOW DEFAULT SHADOW ALGORITHM FROM shadow_db" />
<distsql-case id="show-single-table" value="SHOW SINGLE TABLE t_order FROM single_table_db" />
<distsql-case id="show-single-table-rules" value="SHOW DEFAULT SINGLE TABLE STORAGE UNIT FROM single_table_db" />
<distsql-case id="show-sharding-table-nodes" value="SHOW SHARDING TABLE NODES t_order FROM sharding_db" />