This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 a8ad839541e Add ShardingAlgorithm.getAlgorithmStructure() (#23872)
a8ad839541e is described below
commit a8ad839541e599b1d8985c671a82f9f0658a6c7d
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jan 31 19:09:08 2023 +0800
Add ShardingAlgorithm.getAlgorithmStructure() (#23872)
* Add ShardingAlgorithm.getAlgorithmStructure()
* Add ShardingAlgorithm.getAlgorithmStructure()
---
.../shardingsphere/sharding/spi/ShardingAlgorithm.java | 13 +++++++++++++
.../sharding/inline/InlineShardingAlgorithm.java | 6 ++++++
.../apache/shardingsphere/sharding/rule/ShardingRule.java | 15 ++++++---------
3 files changed, 25 insertions(+), 9 deletions(-)
diff --git
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/spi/ShardingAlgorithm.java
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/spi/ShardingAlgorithm.java
index 3d92cdae5ed..31146ab95b3 100644
---
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/spi/ShardingAlgorithm.java
+++
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/spi/ShardingAlgorithm.java
@@ -19,8 +19,21 @@ package org.apache.shardingsphere.sharding.spi;
import org.apache.shardingsphere.infra.algorithm.ShardingSphereAlgorithm;
+import java.util.Optional;
+
/**
* Sharding algorithm.
*/
public interface ShardingAlgorithm extends ShardingSphereAlgorithm {
+
+ /**
+ * Get algorithm structure.
+ *
+ * @param dataNodePrefix data node prefix
+ * @param shardingColumn sharding column
+ * @return algorithm structure
+ */
+ default Optional<String> getAlgorithmStructure(final String
dataNodePrefix, final String shardingColumn) {
+ return Optional.empty();
+ }
}
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 08f4f7cb6b7..29ecae864c3 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
@@ -31,6 +31,7 @@ import
org.apache.shardingsphere.sharding.exception.algorithm.sharding.Mismatche
import
org.apache.shardingsphere.sharding.exception.algorithm.sharding.ShardingAlgorithmInitializationException;
import java.util.Collection;
+import java.util.Optional;
import java.util.Properties;
/**
@@ -96,6 +97,11 @@ public final class InlineShardingAlgorithm implements
StandardShardingAlgorithm<
}
}
+ @Override
+ public Optional<String> getAlgorithmStructure(final String dataNodePrefix,
final String shardingColumn) {
+ return Optional.of(algorithmExpression.replaceFirst(dataNodePrefix,
"").replaceFirst(shardingColumn, "").replaceAll(" ", ""));
+ }
+
@Override
public String getType() {
return "INLINE";
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 46d4e6ed631..d8f982f5e41 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
@@ -234,7 +234,7 @@ public final class ShardingRule implements DatabaseRule,
DataNodeContainedRule,
if (!isValidActualDataSourceName(sampleTableRule, tableRule)
|| !isValidActualTableName(sampleTableRule, tableRule)) {
return false;
}
- if (!isValidShardingAlgorithm(sampleTableRule, tableRule,
true, checkedConfig) || !isValidShardingAlgorithm(sampleTableRule, tableRule,
false, checkedConfig)) {
+ if (!isBindingShardingAlgorithm(sampleTableRule, tableRule,
true, checkedConfig) || !isBindingShardingAlgorithm(sampleTableRule, tableRule,
false, checkedConfig)) {
return false;
}
}
@@ -259,21 +259,18 @@ public final class ShardingRule implements DatabaseRule,
DataNodeContainedRule,
return true;
}
- private boolean isValidShardingAlgorithm(final TableRule sampleTableRule,
final TableRule tableRule, final boolean databaseAlgorithm, final
BindingTableCheckedConfiguration checkedConfig) {
- String sampleAlgorithmExpression =
getAlgorithmExpression(sampleTableRule, databaseAlgorithm, checkedConfig);
- String algorithmExpression = getAlgorithmExpression(tableRule,
databaseAlgorithm, checkedConfig);
- return sampleAlgorithmExpression.equalsIgnoreCase(algorithmExpression);
+ private boolean isBindingShardingAlgorithm(final TableRule
sampleTableRule, final TableRule tableRule, final boolean databaseAlgorithm,
final BindingTableCheckedConfiguration checkedConfig) {
+ return getAlgorithmExpression(sampleTableRule, databaseAlgorithm,
checkedConfig).equals(getAlgorithmExpression(tableRule, databaseAlgorithm,
checkedConfig));
}
- private String getAlgorithmExpression(final TableRule tableRule, final
boolean databaseAlgorithm, final BindingTableCheckedConfiguration
checkedConfig) {
+ private Optional<String> getAlgorithmExpression(final TableRule tableRule,
final boolean databaseAlgorithm, final BindingTableCheckedConfiguration
checkedConfig) {
ShardingStrategyConfiguration shardingStrategyConfig =
databaseAlgorithm
? null == tableRule.getDatabaseShardingStrategyConfig() ?
checkedConfig.getDefaultDatabaseShardingStrategyConfig() :
tableRule.getDatabaseShardingStrategyConfig()
: null == tableRule.getTableShardingStrategyConfig() ?
checkedConfig.getDefaultTableShardingStrategyConfig() :
tableRule.getTableShardingStrategyConfig();
ShardingAlgorithm shardingAlgorithm =
checkedConfig.getShardingAlgorithms().get(shardingStrategyConfig.getShardingAlgorithmName());
- String originAlgorithmExpression = null == shardingAlgorithm ? "" :
shardingAlgorithm.getProps().getProperty("algorithm-expression", "");
- String sampleDataNodePrefix = databaseAlgorithm ?
tableRule.getDataSourceDataNode().getPrefix() :
tableRule.getTableDataNode().getPrefix();
+ String dataNodePrefix = databaseAlgorithm ?
tableRule.getDataSourceDataNode().getPrefix() :
tableRule.getTableDataNode().getPrefix();
String shardingColumn = getShardingColumn(shardingStrategyConfig,
checkedConfig.getDefaultShardingColumn());
- return originAlgorithmExpression.replaceFirst(sampleDataNodePrefix,
"").replaceFirst(shardingColumn, "").replaceAll(" ", "");
+ return null == shardingAlgorithm ? Optional.empty() :
shardingAlgorithm.getAlgorithmStructure(dataNodePrefix, shardingColumn);
}
private String getShardingColumn(final ShardingStrategyConfiguration
shardingStrategyConfig, final String defaultShardingColumn) {