This is an automated email from the ASF dual-hosted git repository.
yx9o 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 2e1d6c7df8d Add JVMInlineExpressionParser to process groovy expr for
different JVM (#25183)
2e1d6c7df8d is described below
commit 2e1d6c7df8d7b2f90ca41c6d9bb8505717d29efb
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Apr 16 23:34:38 2023 +0800
Add JVMInlineExpressionParser to process groovy expr for different JVM
(#25183)
* Remove static methods on InlineExpressionParser
* Add JVMInlineExpressionParser
* For javadoc
* For javadoc
---
...ReadwriteSplittingRuleConfigurationChecker.java | 4 +-
.../rule/ReadwriteSplittingRule.java | 6 +--
.../complex/ComplexInlineShardingAlgorithm.java | 4 +-
.../sharding/hint/HintInlineShardingAlgorithm.java | 4 +-
.../sharding/inline/InlineShardingAlgorithm.java | 4 +-
.../shardingsphere/sharding/rule/ShardingRule.java | 4 +-
.../shardingsphere/sharding/rule/TableRule.java | 4 +-
.../checker/ShardingTableRuleStatementChecker.java | 8 +--
.../sharding/CoreHintShardingAlgorithmFixture.java | 4 +-
.../groovy/expr/HotspotInlineExpressionParser.java | 35 ++++--------
.../groovy/expr/JVMInlineExpressionParser.java | 52 ++++++++++++++++++
.../expr/HotspotInlineExpressionParserTest.java | 26 ++++-----
.../util/expr/EspressoInlineExpressionParser.java | 63 ++++++++--------------
.../infra/util/expr/InlineExpressionParser.java | 45 +++++-----------
.../util/expr/InlineExpressionParserTest.java | 26 ++++-----
.../ShardingRuleConfigurationImportChecker.java | 4 +-
.../test/e2e/cases/dataset/DataSet.java | 2 +-
.../engine/composer/BatchE2EContainerComposer.java | 2 +-
.../test/e2e/engine/type/DDLE2EIT.java | 2 +-
.../test/e2e/engine/type/dml/BaseDMLE2EIT.java | 2 +-
.../test/e2e/env/DataSetEnvironmentManager.java | 2 +-
21 files changed, 151 insertions(+), 152 deletions(-)
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
index 4a460dead2f..9379bd697ef 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
@@ -81,7 +81,7 @@ public final class ReadwriteSplittingRuleConfigurationChecker
implements RuleCon
private void checkWriteDataSourceNames(final String databaseName, final
Map<String, DataSource> dataSourceMap, final Collection<String>
addedWriteDataSourceNames,
final
ReadwriteSplittingDataSourceRuleConfiguration config, final
Collection<ShardingSphereRule> rules) {
- for (String each : new
InlineExpressionParser(config.getWriteDataSourceName()).splitAndEvaluate()) {
+ for (String each : new
InlineExpressionParser().splitAndEvaluate(config.getWriteDataSourceName())) {
ShardingSpherePreconditions.checkState(dataSourceMap.containsKey(each) ||
containsInOtherRules(each, rules),
() -> new
DataSourceNameExistedException(String.format("Write data source name `%s` not
in database `%s`.", each, databaseName)));
ShardingSpherePreconditions.checkState(addedWriteDataSourceNames.add(each),
@@ -99,7 +99,7 @@ public final class ReadwriteSplittingRuleConfigurationChecker
implements RuleCon
}
private void checkReadeDataSourceNames(final String databaseName, final
Map<String, DataSource> dataSourceMap, final Collection<String>
addedReadDataSourceNames, final String readDataSourceName) {
- for (String each : new
InlineExpressionParser(readDataSourceName).splitAndEvaluate()) {
+ for (String each : new
InlineExpressionParser().splitAndEvaluate(readDataSourceName)) {
ShardingSpherePreconditions.checkState(dataSourceMap.containsKey(each),
() -> new
DataSourceNameExistedException(String.format("Read data source name `%s` not in
database `%s`.", each, databaseName)));
ShardingSpherePreconditions.checkState(addedReadDataSourceNames.add(each),
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index 818c5f199d9..51723684111 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -106,10 +106,10 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
private Map<String, ReadwriteSplittingDataSourceRule>
createStaticDataSourceRules(final ReadwriteSplittingDataSourceRuleConfiguration
config,
final ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm) {
- List<String> inlineReadwriteDataSourceNames = new
InlineExpressionParser(config.getName()).splitAndEvaluate();
- List<String> inlineWriteDatasourceNames = new
InlineExpressionParser(config.getWriteDataSourceName()).splitAndEvaluate();
+ List<String> inlineReadwriteDataSourceNames = new
InlineExpressionParser().splitAndEvaluate(config.getName());
+ List<String> inlineWriteDatasourceNames = new
InlineExpressionParser().splitAndEvaluate(config.getWriteDataSourceName());
List<List<String>> inlineReadDatasourceNames =
config.getReadDataSourceNames().stream()
- .map(each -> new
InlineExpressionParser(each).splitAndEvaluate()).collect(Collectors.toList());
+ .map(each -> new
InlineExpressionParser().splitAndEvaluate(each)).collect(Collectors.toList());
ShardingSpherePreconditions.checkState(inlineWriteDatasourceNames.size() ==
inlineReadwriteDataSourceNames.size(),
() -> new
InvalidInlineExpressionDataSourceNameException("Inline expression write data
source names size error."));
inlineReadDatasourceNames.forEach(each ->
ShardingSpherePreconditions.checkState(each.size() ==
inlineReadwriteDataSourceNames.size(),
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
index 46b66e8510d..d1344dc752c 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
@@ -64,7 +64,7 @@ public final class ComplexInlineShardingAlgorithm implements
ComplexKeysSharding
private String getAlgorithmExpression(final Properties props) {
String algorithmExpression =
props.getProperty(ALGORITHM_EXPRESSION_KEY);
ShardingSpherePreconditions.checkNotNull(algorithmExpression, () ->
new ShardingAlgorithmInitializationException(getType(), "Inline sharding
algorithm expression can not be null."));
- return
InlineExpressionParser.handlePlaceHolder(algorithmExpression.trim());
+ return new
InlineExpressionParser().handlePlaceHolder(algorithmExpression.trim());
}
private Collection<String> getShardingColumns(final Properties props) {
@@ -124,7 +124,7 @@ public final class ComplexInlineShardingAlgorithm
implements ComplexKeysSharding
}
private Closure<?> createClosure() {
- Closure<?> result = new
InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new
Expando(), null, null);
+ Closure<?> result = new
InlineExpressionParser().evaluateClosure(algorithmExpression).rehydrate(new
Expando(), null, null);
result.setResolveStrategy(Closure.DELEGATE_ONLY);
return result;
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithm.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithm.java
index 229311b8dc5..1d25a4f56b5 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithm.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithm.java
@@ -50,7 +50,7 @@ public final class HintInlineShardingAlgorithm implements
HintShardingAlgorithm<
private String getAlgorithmExpression(final Properties props) {
String algorithmExpression =
props.getProperty(ALGORITHM_EXPRESSION_KEY, DEFAULT_ALGORITHM_EXPRESSION);
ShardingSpherePreconditions.checkNotNull(algorithmExpression, () ->
new ShardingAlgorithmInitializationException(getType(), "Inline sharding
algorithm expression can not be null."));
- return
InlineExpressionParser.handlePlaceHolder(algorithmExpression.trim());
+ return new
InlineExpressionParser().handlePlaceHolder(algorithmExpression.trim());
}
@Override
@@ -65,7 +65,7 @@ public final class HintInlineShardingAlgorithm implements
HintShardingAlgorithm<
}
private Closure<?> createClosure() {
- Closure<?> result = new
InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new
Expando(), null, null);
+ Closure<?> result = new
InlineExpressionParser().evaluateClosure(algorithmExpression).rehydrate(new
Expando(), null, null);
result.setResolveStrategy(Closure.DELEGATE_ONLY);
return result;
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java
index 3062feae91b..3e7516ed341 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java
@@ -56,7 +56,7 @@ public final class InlineShardingAlgorithm implements
StandardShardingAlgorithm<
String expression = props.getProperty(ALGORITHM_EXPRESSION_KEY);
ShardingSpherePreconditions.checkState(null != expression &&
!expression.isEmpty(),
() -> new ShardingAlgorithmInitializationException(getType(),
"Inline sharding algorithm expression cannot be null or empty"));
- return InlineExpressionParser.handlePlaceHolder(expression.trim());
+ return new
InlineExpressionParser().handlePlaceHolder(expression.trim());
}
private boolean isAllowRangeQuery(final Properties props) {
@@ -79,7 +79,7 @@ public final class InlineShardingAlgorithm implements
StandardShardingAlgorithm<
}
private Closure<?> createClosure() {
- Closure<?> result = new
InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new
Expando(), null, null);
+ Closure<?> result = new
InlineExpressionParser().evaluateClosure(algorithmExpression).rehydrate(new
Expando(), null, null);
result.setResolveStrategy(Closure.DELEGATE_ONLY);
return result;
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index de0efa1b67f..d454f24a32c 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -164,12 +164,12 @@ public final class ShardingRule implements DatabaseRule,
DataNodeContainedRule,
}
private Collection<String> getDataSourceNames(final
ShardingAutoTableRuleConfiguration shardingAutoTableRuleConfig) {
- List<String> actualDataSources = new
InlineExpressionParser(shardingAutoTableRuleConfig.getActualDataSources()).splitAndEvaluate();
+ List<String> actualDataSources = new
InlineExpressionParser().splitAndEvaluate(shardingAutoTableRuleConfig.getActualDataSources());
return new HashSet<>(actualDataSources);
}
private Collection<String> getDataSourceNames(final
ShardingTableRuleConfiguration shardingTableRuleConfig) {
- List<String> actualDataNodes = new
InlineExpressionParser(shardingTableRuleConfig.getActualDataNodes()).splitAndEvaluate();
+ List<String> actualDataNodes = new
InlineExpressionParser().splitAndEvaluate(shardingTableRuleConfig.getActualDataNodes());
return actualDataNodes.stream().map(each -> new
DataNode(each).getDataSourceName()).collect(Collectors.toList());
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/TableRule.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/TableRule.java
index cad887647c9..93362b3d753 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/TableRule.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/TableRule.java
@@ -106,7 +106,7 @@ public final class TableRule {
public TableRule(final ShardingTableRuleConfiguration tableRuleConfig,
final Collection<String> dataSourceNames, final String
defaultGenerateKeyColumn) {
logicTable = tableRuleConfig.getLogicTable();
- List<String> dataNodes = new
InlineExpressionParser(tableRuleConfig.getActualDataNodes()).splitAndEvaluate();
+ List<String> dataNodes = new
InlineExpressionParser().splitAndEvaluate(tableRuleConfig.getActualDataNodes());
dataNodeIndexMap = new HashMap<>(dataNodes.size(), 1);
actualDataNodes = isEmptyDataNodes(dataNodes) ?
generateDataNodes(tableRuleConfig.getLogicTable(), dataSourceNames) :
generateDataNodes(dataNodes, dataSourceNames);
actualTables = getActualTables();
@@ -158,7 +158,7 @@ public final class TableRule {
return new LinkedList<>();
}
List<String> dataSources =
Strings.isNullOrEmpty(tableRuleConfig.getActualDataSources()) ? new
LinkedList<>(dataSourceNames)
- : new
InlineExpressionParser(tableRuleConfig.getActualDataSources()).splitAndEvaluate();
+ : new
InlineExpressionParser().splitAndEvaluate(tableRuleConfig.getActualDataSources());
return
DataNodeUtils.getFormatDataNodes(shardingAlgorithm.getAutoTablesAmount(),
logicTable, dataSources);
}
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
index ae930722215..f26d87848a0 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
@@ -189,12 +189,12 @@ public final class ShardingTableRuleStatementChecker {
}
Collection<String> result = new LinkedHashSet<>();
tableRuleConfigs.forEach(each ->
result.addAll(getDataSourceNames(each)));
- autoTableRuleConfigs.forEach(each -> result.addAll(new
InlineExpressionParser(each.getActualDataSources()).splitAndEvaluate()));
+ autoTableRuleConfigs.forEach(each -> result.addAll(new
InlineExpressionParser().splitAndEvaluate(each.getActualDataSources())));
return result;
}
private static Collection<String> getDataSourceNames(final
ShardingTableRuleConfiguration shardingTableRuleConfig) {
- return new
InlineExpressionParser(shardingTableRuleConfig.getActualDataNodes()).splitAndEvaluate().stream().map(each
-> new DataNode(each).getDataSourceName()).collect(Collectors.toList());
+ return new
InlineExpressionParser().splitAndEvaluate(shardingTableRuleConfig.getActualDataNodes()).stream().map(each
-> new DataNode(each).getDataSourceName()).collect(Collectors.toList());
}
private static Collection<String> getDataSourceNames(final
Collection<String> actualDataNodes) {
@@ -326,7 +326,7 @@ public final class ShardingTableRuleStatementChecker {
Collection<String> result = new LinkedHashSet<>();
result.addAll(config.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getActualDataSources)
.map(each ->
Splitter.on(",").trimResults().splitToList(each)).flatMap(Collection::stream).collect(Collectors.toSet()));
- result.addAll(config.getTables().stream().map(each -> new
InlineExpressionParser(each.getActualDataNodes()).splitAndEvaluate())
+ result.addAll(config.getTables().stream().map(each -> new
InlineExpressionParser().splitAndEvaluate(each.getActualDataNodes()))
.flatMap(Collection::stream).distinct().map(each -> new
DataNode(each).getDataSourceName()).collect(Collectors.toSet()));
return result;
}
@@ -337,7 +337,7 @@ public final class ShardingTableRuleStatementChecker {
}
private static Collection<String> parseDateSource(final String dateSource)
{
- return new InlineExpressionParser(dateSource).splitAndEvaluate();
+ return new InlineExpressionParser().splitAndEvaluate(dateSource);
}
private static Collection<String> getLogicDataSources(final
ShardingSphereDatabase database) {
diff --git
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/sharding/CoreHintShardingAlgorithmFixture.java
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/sharding/CoreHintShardingAlgorithmFixture.java
index 36c792d18f5..414858015b2 100644
---
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/sharding/CoreHintShardingAlgorithmFixture.java
+++
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/sharding/CoreHintShardingAlgorithmFixture.java
@@ -46,7 +46,7 @@ public final class CoreHintShardingAlgorithmFixture
implements HintShardingAlgor
private String getAlgorithmExpression(final Properties props) {
String algorithmExpression =
props.getProperty(ALGORITHM_EXPRESSION_KEY, DEFAULT_ALGORITHM_EXPRESSION);
Preconditions.checkNotNull(algorithmExpression, "Inline sharding
algorithm expression can not be null.");
- return
InlineExpressionParser.handlePlaceHolder(algorithmExpression.trim());
+ return new
InlineExpressionParser().handlePlaceHolder(algorithmExpression.trim());
}
@Override
@@ -61,7 +61,7 @@ public final class CoreHintShardingAlgorithmFixture
implements HintShardingAlgor
}
private Closure<?> createClosure() {
- Closure<?> result = new
InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new
Expando(), null, null);
+ Closure<?> result = new
InlineExpressionParser().evaluateClosure(algorithmExpression).rehydrate(new
Expando(), null, null);
result.setResolveStrategy(Closure.DELEGATE_ONLY);
return result;
}
diff --git
a/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParser.java
b/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParser.java
index 12dedfae214..032aaec5c05 100644
---
a/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParser.java
+++
b/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParser.java
@@ -36,10 +36,10 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
- * Hotspot Inline expression parser.
+ * Hotspot inline expression parser.
*/
@RequiredArgsConstructor
-public final class HotspotInlineExpressionParser {
+public final class HotspotInlineExpressionParser implements
JVMInlineExpressionParser {
private static final char SPLITTER = ',';
@@ -47,33 +47,18 @@ public final class HotspotInlineExpressionParser {
private static final GroovyShell SHELL = new GroovyShell();
- private final String inlineExpression;
-
- /**
- * Replace all inline expression placeholders.
- *
- * @param inlineExpression inline expression with {@code $->}
- * @return result inline expression with {@code $}
- */
- public static String handlePlaceHolder(final String inlineExpression) {
+ @Override
+ public String handlePlaceHolder(final String inlineExpression) {
return inlineExpression.contains("$->{") ?
inlineExpression.replaceAll("\\$->\\{", "\\$\\{") : inlineExpression;
}
- /**
- * Split and evaluate inline expression.
- *
- * @return result list
- */
- public List<String> splitAndEvaluate() {
- return Strings.isNullOrEmpty(inlineExpression) ?
Collections.emptyList() : flatten(evaluate(split()));
+ @Override
+ public List<String> splitAndEvaluate(final String inlineExpression) {
+ return Strings.isNullOrEmpty(inlineExpression) ?
Collections.emptyList() : flatten(evaluate(split(inlineExpression)));
}
- /**
- * Evaluate closure.
- *
- * @return closure
- */
- public Closure<?> evaluateClosure() {
+ @Override
+ public Closure<?> evaluateClosure(final String inlineExpression) {
return (Closure<?>) evaluate("{it -> \"" + inlineExpression + "\"}");
}
@@ -103,7 +88,7 @@ public final class HotspotInlineExpressionParser {
return script.run();
}
- private List<String> split() {
+ private List<String> split(final String inlineExpression) {
List<String> result = new ArrayList<>();
StringBuilder segment = new StringBuilder();
int bracketsDepth = 0;
diff --git
a/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/JVMInlineExpressionParser.java
b/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/JVMInlineExpressionParser.java
new file mode 100644
index 00000000000..65a57a57537
--- /dev/null
+++
b/infra/util-groovy/src/main/java/org/apache/shardingsphere/infra/util/groovy/expr/JVMInlineExpressionParser.java
@@ -0,0 +1,52 @@
+/*
+ * 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.infra.util.groovy.expr;
+
+import groovy.lang.Closure;
+
+import java.util.List;
+
+/**
+ * JVM inline expression parser.
+ */
+public interface JVMInlineExpressionParser {
+
+ /**
+ * Replace all inline expression placeholders.
+ *
+ * @param inlineExpression inline expression with {@code $->}
+ * @return result inline expression with {@code $}
+ */
+ String handlePlaceHolder(String inlineExpression);
+
+ /**
+ * Split and evaluate inline expression.
+ *
+ * @param inlineExpression inline expression
+ * @return result list
+ */
+ List<String> splitAndEvaluate(String inlineExpression);
+
+ /**
+ * Evaluate closure.
+ *
+ * @param inlineExpression inline expression
+ * @return closure
+ */
+ Closure<?> evaluateClosure(String inlineExpression);
+}
diff --git
a/infra/util-groovy/src/test/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParserTest.java
b/infra/util-groovy/src/test/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParserTest.java
index a623679db2c..3b35fed5ff2 100644
---
a/infra/util-groovy/src/test/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParserTest.java
+++
b/infra/util-groovy/src/test/java/org/apache/shardingsphere/infra/util/groovy/expr/HotspotInlineExpressionParserTest.java
@@ -30,62 +30,62 @@ class HotspotInlineExpressionParserTest {
@Test
void assertEvaluateForExpressionIsNull() {
- List<String> expected = new
HotspotInlineExpressionParser(null).splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate(null);
assertThat(expected, is(Collections.<String>emptyList()));
}
@Test
void assertEvaluateForSimpleString() {
- List<String> expected = new HotspotInlineExpressionParser(" t_order_0,
t_order_1 ").splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate(" t_order_0, t_order_1 ");
assertThat(expected.size(), is(2));
assertThat(expected, hasItems("t_order_0", "t_order_1"));
}
@Test
void assertEvaluateForNull() {
- List<String> expected = new
HotspotInlineExpressionParser("t_order_${null}").splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate("t_order_${null}");
assertThat(expected.size(), is(1));
assertThat(expected, hasItems("t_order_"));
}
@Test
void assertEvaluateForLiteral() {
- List<String> expected = new
HotspotInlineExpressionParser("t_order_${'xx'}").splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate("t_order_${'xx'}");
assertThat(expected.size(), is(1));
assertThat(expected, hasItems("t_order_xx"));
}
@Test
void assertEvaluateForArray() {
- List<String> expected = new
HotspotInlineExpressionParser("t_order_${[0, 1, 2]},t_order_item_${[0,
2]}").splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate("t_order_${[0, 1,
2]},t_order_item_${[0, 2]}");
assertThat(expected.size(), is(5));
assertThat(expected, hasItems("t_order_0", "t_order_1", "t_order_2",
"t_order_item_0", "t_order_item_2"));
}
@Test
void assertEvaluateForRange() {
- List<String> expected = new
HotspotInlineExpressionParser("t_order_${0..2},t_order_item_${0..1}").splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate("t_order_${0..2},t_order_item_${0..1}");
assertThat(expected.size(), is(5));
assertThat(expected, hasItems("t_order_0", "t_order_1", "t_order_2",
"t_order_item_0", "t_order_item_1"));
}
@Test
void assertEvaluateForComplex() {
- List<String> expected = new
HotspotInlineExpressionParser("t_${['new','old']}_order_${1..2},
t_config").splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate("t_${['new','old']}_order_${1..2},
t_config");
assertThat(expected.size(), is(5));
assertThat(expected, hasItems("t_new_order_1", "t_new_order_2",
"t_old_order_1", "t_old_order_2", "t_config"));
}
@Test
void assertEvaluateForCalculate() {
- List<String> expected = new
HotspotInlineExpressionParser("t_${[\"new${1+2}\",'old']}_order_${1..2}").splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate("t_${[\"new${1+2}\",'old']}_order_${1..2}");
assertThat(expected.size(), is(4));
assertThat(expected, hasItems("t_new3_order_1", "t_new3_order_2",
"t_old_order_1", "t_old_order_2"));
}
@Test
void assertEvaluateForExpressionPlaceHolder() {
- List<String> expected = new
HotspotInlineExpressionParser("t_$->{[\"new$->{1+2}\",'old']}_order_$->{1..2}").splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate("t_$->{[\"new$->{1+2}\",'old']}_order_$->{1..2}");
assertThat(expected.size(), is(4));
assertThat(expected, hasItems("t_new3_order_1", "t_new3_order_2",
"t_old_order_1", "t_old_order_2"));
}
@@ -102,19 +102,19 @@ class HotspotInlineExpressionParserTest {
expression.append(",");
}
}
- List<String> expected = new
HotspotInlineExpressionParser(expression.toString()).splitAndEvaluate();
+ List<String> expected = new
HotspotInlineExpressionParser().splitAndEvaluate(expression.toString());
assertThat(expected.size(), is(1024));
assertThat(expected, hasItems("ds_0.t_user_0", "ds_15.t_user_1023"));
}
@Test
void assertHandlePlaceHolder() {
-
assertThat(HotspotInlineExpressionParser.handlePlaceHolder("t_$->{[\"new$->{1+2}\"]}"),
is("t_${[\"new${1+2}\"]}"));
-
assertThat(HotspotInlineExpressionParser.handlePlaceHolder("t_${[\"new$->{1+2}\"]}"),
is("t_${[\"new${1+2}\"]}"));
+ assertThat(new
HotspotInlineExpressionParser().handlePlaceHolder("t_$->{[\"new$->{1+2}\"]}"),
is("t_${[\"new${1+2}\"]}"));
+ assertThat(new
HotspotInlineExpressionParser().handlePlaceHolder("t_${[\"new$->{1+2}\"]}"),
is("t_${[\"new${1+2}\"]}"));
}
@Test
void assertEvaluateClosure() {
- assertThat(new
HotspotInlineExpressionParser("${1+2}").evaluateClosure().call().toString(),
is("3"));
+ assertThat(new
HotspotInlineExpressionParser().evaluateClosure("${1+2}").call().toString(),
is("3"));
}
}
diff --git
a/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/EspressoInlineExpressionParser.java
b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/EspressoInlineExpressionParser.java
index b2385a9ff22..65e93f4dd07 100644
---
a/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/EspressoInlineExpressionParser.java
+++
b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/EspressoInlineExpressionParser.java
@@ -18,6 +18,8 @@
package org.apache.shardingsphere.infra.util.expr;
import groovy.lang.Closure;
+import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
+import
org.apache.shardingsphere.infra.util.groovy.expr.JVMInlineExpressionParser;
import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.TypeLiteral;
import org.graalvm.polyglot.Value;
@@ -25,70 +27,49 @@ import org.graalvm.polyglot.Value;
import java.net.URL;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
/**
- * Espresso Inline expression parser.
+ * Espresso inline expression parser.
*/
-public final class EspressoInlineExpressionParser {
+public final class EspressoInlineExpressionParser implements
JVMInlineExpressionParser {
private static final Context POLYGLOT;
- private final Value espressoInlineExpressionParser;
-
static {
// TODO https://github.com/oracle/graal/issues/4555 not yet closed
String javaHome = System.getenv("JAVA_HOME");
- if (null == javaHome) {
- throw new RuntimeException("Failed to determine the system's
environment variable JAVA_HOME!");
- }
- URL resource =
EspressoInlineExpressionParser.class.getClassLoader().getResource("espresso-need-libs");
- assert null != resource;
+ ShardingSpherePreconditions.checkNotNull(javaHome, () -> new
RuntimeException("Failed to determine the system's environment variable
JAVA_HOME!"));
+ URL resource =
Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("espresso-need-libs"));
String dir = resource.getPath();
String javaClasspath = String.join(":", dir + "/groovy.jar", dir +
"/guava.jar", dir + "/shardingsphere-infra-util-groovy.jar");
POLYGLOT = Context.newBuilder().allowAllAccess(true)
.option("java.Properties.org.graalvm.home", javaHome)
- .option("java.MultiThreaded", "true")
+ .option("java.MultiThreaded", Boolean.TRUE.toString())
.option("java.Classpath", javaClasspath)
.build();
}
- public EspressoInlineExpressionParser(final String inlineExpression) {
- espressoInlineExpressionParser = POLYGLOT.getBindings("java")
-
.getMember("org.apache.shardingsphere.infra.util.expr.InlineExpressionParser")
- .newInstance(inlineExpression);
- }
-
- /**
- * Replace all inline expression placeholders.
- *
- * @param inlineExpression inline expression with {@code $->}
- * @return result inline expression with {@code $}
- */
- public static String handlePlaceHolder(final String inlineExpression) {
+ @Override
+ public String handlePlaceHolder(final String inlineExpression) {
return POLYGLOT.getBindings("java")
-
.getMember("org.apache.shardingsphere.infra.util.expr.InlineExpressionParser")
- .invokeMember("handlePlaceHolder", inlineExpression)
- .asString();
+
.getMember("org.apache.shardingsphere.infra.util.expr.InlineExpressionParser").invokeMember("handlePlaceHolder",
inlineExpression).asString();
}
- /**
- * Split and evaluate inline expression.
- *
- * @return result list
- */
- public List<String> splitAndEvaluate() {
- List<String> splitAndEvaluate =
espressoInlineExpressionParser.invokeMember("splitAndEvaluate").as(new
TypeLiteral<List<String>>() {
+ @Override
+ public List<String> splitAndEvaluate(final String inlineExpression) {
+ List<String> splitAndEvaluate =
getInlineExpressionParser().invokeMember("splitAndEvaluate",
inlineExpression).as(new TypeLiteral<List<String>>() {
});
// GraalVM Truffle Espresso 22.3.1 has a different behavior for
generic List than Hotspot.
- return splitAndEvaluate.size() == 0 ? Collections.emptyList() :
splitAndEvaluate;
+ return splitAndEvaluate.isEmpty() ? Collections.emptyList() :
splitAndEvaluate;
+ }
+
+ @Override
+ public Closure<?> evaluateClosure(final String inlineExpression) {
+ return getInlineExpressionParser().invokeMember("evaluateClosure",
inlineExpression).as(Closure.class);
}
- /**
- * Evaluate closure.
- *
- * @return closure
- */
- public Closure<?> evaluateClosure() {
- return
espressoInlineExpressionParser.invokeMember("evaluateClosure").as(Closure.class);
+ private Value getInlineExpressionParser() {
+ return
POLYGLOT.getBindings("java").getMember("org.apache.shardingsphere.infra.util.expr.InlineExpressionParser").newInstance();
}
}
diff --git
a/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/InlineExpressionParser.java
b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/InlineExpressionParser.java
index 516d61eb53e..ab651671331 100644
---
a/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/InlineExpressionParser.java
+++
b/infra/util/src/main/java/org/apache/shardingsphere/infra/util/expr/InlineExpressionParser.java
@@ -18,36 +18,27 @@
package org.apache.shardingsphere.infra.util.expr;
import groovy.lang.Closure;
-import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.util.groovy.expr.HotspotInlineExpressionParser;
+import
org.apache.shardingsphere.infra.util.groovy.expr.JVMInlineExpressionParser;
import java.util.List;
/**
* Inline expression parser.
*/
-@RequiredArgsConstructor
public final class InlineExpressionParser {
private static final boolean IS_SUBSTRATE_VM;
- private final EspressoInlineExpressionParser
espressoInlineExpressionParser;
-
- private final HotspotInlineExpressionParser hotspotInlineExpressionParser;
+ private final JVMInlineExpressionParser jvmInlineExpressionParser;
static {
// workaround for
https://github.com/helidon-io/helidon-build-tools/issues/858
IS_SUBSTRATE_VM = System.getProperty("java.vm.name").equals("Substrate
VM");
}
- public InlineExpressionParser(final String inlineExpression) {
- if (IS_SUBSTRATE_VM) {
- this.hotspotInlineExpressionParser = null;
- this.espressoInlineExpressionParser = new
EspressoInlineExpressionParser(inlineExpression);
- } else {
- this.hotspotInlineExpressionParser = new
HotspotInlineExpressionParser(inlineExpression);
- this.espressoInlineExpressionParser = null;
- }
+ public InlineExpressionParser() {
+ jvmInlineExpressionParser = IS_SUBSTRATE_VM ? new
EspressoInlineExpressionParser() : new HotspotInlineExpressionParser();
}
/**
@@ -56,41 +47,31 @@ public final class InlineExpressionParser {
* @param inlineExpression inline expression with {@code $->}
* @return result inline expression with {@code $}
*/
- public static String handlePlaceHolder(final String inlineExpression) {
+ public String handlePlaceHolder(final String inlineExpression) {
if (IS_SUBSTRATE_VM) {
- return
EspressoInlineExpressionParser.handlePlaceHolder(inlineExpression);
+ return new
EspressoInlineExpressionParser().handlePlaceHolder(inlineExpression);
} else {
- return
HotspotInlineExpressionParser.handlePlaceHolder(inlineExpression);
+ return new
HotspotInlineExpressionParser().handlePlaceHolder(inlineExpression);
}
}
/**
* Split and evaluate inline expression.
*
+ * @param inlineExpression inline expression
* @return result list
*/
- public List<String> splitAndEvaluate() {
- if (IS_SUBSTRATE_VM) {
- assert null != espressoInlineExpressionParser;
- return espressoInlineExpressionParser.splitAndEvaluate();
- } else {
- assert null != hotspotInlineExpressionParser;
- return hotspotInlineExpressionParser.splitAndEvaluate();
- }
+ public List<String> splitAndEvaluate(final String inlineExpression) {
+ return jvmInlineExpressionParser.splitAndEvaluate(inlineExpression);
}
/**
* Evaluate closure.
*
+ * @param inlineExpression inline expression
* @return closure
*/
- public Closure<?> evaluateClosure() {
- if (IS_SUBSTRATE_VM) {
- assert null != espressoInlineExpressionParser;
- return espressoInlineExpressionParser.evaluateClosure();
- } else {
- assert null != hotspotInlineExpressionParser;
- return hotspotInlineExpressionParser.evaluateClosure();
- }
+ public Closure<?> evaluateClosure(final String inlineExpression) {
+ return jvmInlineExpressionParser.evaluateClosure(inlineExpression);
}
}
diff --git
a/infra/util/src/test/java/org/apache/shardingsphere/infra/util/expr/InlineExpressionParserTest.java
b/infra/util/src/test/java/org/apache/shardingsphere/infra/util/expr/InlineExpressionParserTest.java
index 2649dd283db..0504d41d2e8 100644
---
a/infra/util/src/test/java/org/apache/shardingsphere/infra/util/expr/InlineExpressionParserTest.java
+++
b/infra/util/src/test/java/org/apache/shardingsphere/infra/util/expr/InlineExpressionParserTest.java
@@ -31,62 +31,62 @@ class InlineExpressionParserTest {
@Test
void assertEvaluateForExpressionIsNull() {
- List<String> expected = new
InlineExpressionParser(null).splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate(null);
assertThat(expected, is(Collections.<String>emptyList()));
}
@Test
void assertEvaluateForSimpleString() {
- List<String> expected = new InlineExpressionParser(" t_order_0,
t_order_1 ").splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate(" t_order_0, t_order_1 ");
assertThat(expected.size(), is(2));
assertThat(expected, hasItems("t_order_0", "t_order_1"));
}
@Test
void assertEvaluateForNull() {
- List<String> expected = new
InlineExpressionParser("t_order_${null}").splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate("t_order_${null}");
assertThat(expected.size(), is(1));
assertThat(expected, hasItems("t_order_"));
}
@Test
void assertEvaluateForLiteral() {
- List<String> expected = new
InlineExpressionParser("t_order_${'xx'}").splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate("t_order_${'xx'}");
assertThat(expected.size(), is(1));
assertThat(expected, hasItems("t_order_xx"));
}
@Test
void assertEvaluateForArray() {
- List<String> expected = new InlineExpressionParser("t_order_${[0, 1,
2]},t_order_item_${[0, 2]}").splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate("t_order_${[0, 1,
2]},t_order_item_${[0, 2]}");
assertThat(expected.size(), is(5));
assertThat(expected, hasItems("t_order_0", "t_order_1", "t_order_2",
"t_order_item_0", "t_order_item_2"));
}
@Test
void assertEvaluateForRange() {
- List<String> expected = new
InlineExpressionParser("t_order_${0..2},t_order_item_${0..1}").splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate("t_order_${0..2},t_order_item_${0..1}");
assertThat(expected.size(), is(5));
assertThat(expected, hasItems("t_order_0", "t_order_1", "t_order_2",
"t_order_item_0", "t_order_item_1"));
}
@Test
void assertEvaluateForComplex() {
- List<String> expected = new
InlineExpressionParser("t_${['new','old']}_order_${1..2},
t_config").splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate("t_${['new','old']}_order_${1..2},
t_config");
assertThat(expected.size(), is(5));
assertThat(expected, hasItems("t_new_order_1", "t_new_order_2",
"t_old_order_1", "t_old_order_2", "t_config"));
}
@Test
void assertEvaluateForCalculate() {
- List<String> expected = new
InlineExpressionParser("t_${[\"new${1+2}\",'old']}_order_${1..2}").splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate("t_${[\"new${1+2}\",'old']}_order_${1..2}");
assertThat(expected.size(), is(4));
assertThat(expected, hasItems("t_new3_order_1", "t_new3_order_2",
"t_old_order_1", "t_old_order_2"));
}
@Test
void assertEvaluateForExpressionPlaceHolder() {
- List<String> expected = new
InlineExpressionParser("t_$->{[\"new$->{1+2}\",'old']}_order_$->{1..2}").splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate("t_$->{[\"new$->{1+2}\",'old']}_order_$->{1..2}");
assertThat(expected.size(), is(4));
assertThat(expected, hasItems("t_new3_order_1", "t_new3_order_2",
"t_old_order_1", "t_old_order_2"));
}
@@ -103,15 +103,15 @@ class InlineExpressionParserTest {
expression.append(",");
}
}
- List<String> expected = new
InlineExpressionParser(expression.toString()).splitAndEvaluate();
+ List<String> expected = new
InlineExpressionParser().splitAndEvaluate(expression.toString());
assertThat(expected.size(), is(1024));
assertThat(expected, hasItems("ds_0.t_user_0", "ds_15.t_user_1023"));
}
@Test
void assertHandlePlaceHolder() {
-
assertThat(InlineExpressionParser.handlePlaceHolder("t_$->{[\"new$->{1+2}\"]}"),
is("t_${[\"new${1+2}\"]}"));
-
assertThat(InlineExpressionParser.handlePlaceHolder("t_${[\"new$->{1+2}\"]}"),
is("t_${[\"new${1+2}\"]}"));
+ assertThat(new
InlineExpressionParser().handlePlaceHolder("t_$->{[\"new$->{1+2}\"]}"),
is("t_${[\"new${1+2}\"]}"));
+ assertThat(new
InlineExpressionParser().handlePlaceHolder("t_${[\"new$->{1+2}\"]}"),
is("t_${[\"new${1+2}\"]}"));
}
/**
@@ -123,6 +123,6 @@ class InlineExpressionParserTest {
@Test
@DisabledInNativeImage
void assertEvaluateClosure() {
- assertThat(new
InlineExpressionParser("${1+2}").evaluateClosure().call().toString(), is("3"));
+ assertThat(new
InlineExpressionParser().evaluateClosure("${1+2}").call().toString(), is("3"));
}
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ShardingRuleConfigurationImportChecker.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ShardingRuleConfigurationImportChecker.java
index ff801cc3219..ca265943317 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ShardingRuleConfigurationImportChecker.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ShardingRuleConfigurationImportChecker.java
@@ -90,12 +90,12 @@ public final class ShardingRuleConfigurationImportChecker {
}
private Collection<String> getDataSourceNames(final
ShardingAutoTableRuleConfiguration shardingAutoTableRuleConfig) {
- Collection<String> actualDataSources = new
InlineExpressionParser(shardingAutoTableRuleConfig.getActualDataSources()).splitAndEvaluate();
+ Collection<String> actualDataSources = new
InlineExpressionParser().splitAndEvaluate(shardingAutoTableRuleConfig.getActualDataSources());
return new HashSet<>(actualDataSources);
}
private Collection<String> getDataSourceNames(final
ShardingTableRuleConfiguration shardingTableRuleConfig) {
- Collection<String> actualDataNodes = new
InlineExpressionParser(shardingTableRuleConfig.getActualDataNodes()).splitAndEvaluate();
+ Collection<String> actualDataNodes = new
InlineExpressionParser().splitAndEvaluate(shardingTableRuleConfig.getActualDataNodes());
return actualDataNodes.stream().map(each -> new
DataNode(each).getDataSourceName()).collect(Collectors.toList());
}
diff --git
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/dataset/DataSet.java
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/dataset/DataSet.java
index d1d9d91b51b..9fdf6f856e0 100644
---
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/dataset/DataSet.java
+++
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/dataset/DataSet.java
@@ -65,7 +65,7 @@ public final class DataSet {
* @return data set meta data belong to current data node
*/
public DataSetMetaData findMetaData(final DataNode dataNode) {
- Optional<DataSetMetaData> result = metaDataList.stream().filter(each
-> contains(new InlineExpressionParser(each.getDataNodes()).splitAndEvaluate(),
dataNode)).findFirst();
+ Optional<DataSetMetaData> result = metaDataList.stream().filter(each
-> contains(new InlineExpressionParser().splitAndEvaluate(each.getDataNodes()),
dataNode)).findFirst();
return result.orElseThrow(() -> new
IllegalArgumentException(String.format("Cannot find data node: %s", dataNode)));
}
diff --git
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/composer/BatchE2EContainerComposer.java
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/composer/BatchE2EContainerComposer.java
index 7a550c7f7d6..7dc10670d10 100644
---
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/composer/BatchE2EContainerComposer.java
+++
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/composer/BatchE2EContainerComposer.java
@@ -84,7 +84,7 @@ public final class BatchE2EContainerComposer extends
E2EContainerComposer {
DataSet expected = getDataSet(actualUpdateCounts);
assertThat("Only support single table for DML.",
expected.getMetaDataList().size(), is(1));
DataSetMetaData expectedDataSetMetaData =
expected.getMetaDataList().get(0);
- for (String each : new
InlineExpressionParser(expectedDataSetMetaData.getDataNodes()).splitAndEvaluate())
{
+ for (String each : new
InlineExpressionParser().splitAndEvaluate(expectedDataSetMetaData.getDataNodes()))
{
DataNode dataNode = new DataNode(each);
DataSource dataSource =
getActualDataSourceMap().get(dataNode.getDataSourceName());
try (
diff --git
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/DDLE2EIT.java
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/DDLE2EIT.java
index 7eddcd645c0..faed90702e5 100644
---
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/DDLE2EIT.java
+++
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/DDLE2EIT.java
@@ -172,7 +172,7 @@ class DDLE2EIT {
private void assertTableMetaData(final AssertionTestParameter testParam,
final SingleE2EContainerComposer containerComposer) throws SQLException {
String tableName =
containerComposer.getAssertion().getInitialSQL().getAffectedTable();
DataSetMetaData expected =
containerComposer.getDataSet().findMetaData(tableName);
- Collection<DataNode> dataNodes = new
InlineExpressionParser(expected.getDataNodes()).splitAndEvaluate().stream().map(DataNode::new).collect(Collectors.toList());
+ Collection<DataNode> dataNodes = new
InlineExpressionParser().splitAndEvaluate(expected.getDataNodes()).stream().map(DataNode::new).collect(Collectors.toList());
if (expected.getColumns().isEmpty()) {
assertNotContainsTable(containerComposer, dataNodes);
return;
diff --git
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BaseDMLE2EIT.java
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BaseDMLE2EIT.java
index a902b1a95fa..c3067b08e6d 100644
---
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BaseDMLE2EIT.java
+++
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BaseDMLE2EIT.java
@@ -85,7 +85,7 @@ public abstract class BaseDMLE2EIT {
assertThat("Only support single table for DML.",
containerComposer.getDataSet().getMetaDataList().size(), is(1));
assertThat(actualUpdateCount,
is(containerComposer.getDataSet().getUpdateCount()));
DataSetMetaData expectedDataSetMetaData =
containerComposer.getDataSet().getMetaDataList().get(0);
- for (String each : new
InlineExpressionParser(expectedDataSetMetaData.getDataNodes()).splitAndEvaluate())
{
+ for (String each : new
InlineExpressionParser().splitAndEvaluate(expectedDataSetMetaData.getDataNodes()))
{
DataNode dataNode = new DataNode(each);
DataSource dataSource =
containerComposer.getActualDataSourceMap().get(dataNode.getDataSourceName());
try (
diff --git
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/env/DataSetEnvironmentManager.java
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/env/DataSetEnvironmentManager.java
index 645d6884021..11e1b9e1c7e 100644
---
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/env/DataSetEnvironmentManager.java
+++
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/env/DataSetEnvironmentManager.java
@@ -164,7 +164,7 @@ public final class DataSetEnvironmentManager {
private Map<String, Collection<String>> getDataNodeMap(final
DataSetMetaData dataSetMetaData) {
Map<String, Collection<String>> result = new LinkedHashMap<>();
- for (String each : new
InlineExpressionParser(dataSetMetaData.getDataNodes()).splitAndEvaluate()) {
+ for (String each : new
InlineExpressionParser().splitAndEvaluate(dataSetMetaData.getDataNodes())) {
DataNode dataNode = new DataNode(each);
if (!result.containsKey(dataNode.getDataSourceName())) {
result.put(dataNode.getDataSourceName(), new LinkedList<>());