You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/06/08 03:37:27 UTC

[shardingsphere] branch master updated: Revert "Rename actualTablePrefix to replaceTablePrefix and support logic table replace prefix (#18117)" (#18233)

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 12d610ec9d5 Revert "Rename actualTablePrefix to replaceTablePrefix and support logic table replace prefix (#18117)" (#18233)
12d610ec9d5 is described below

commit 12d610ec9d5429c8ba80d1f710bd8261fda6e099
Author: Chuxin Chen <ch...@qq.com>
AuthorDate: Wed Jun 8 11:37:21 2022 +0800

    Revert "Rename actualTablePrefix to replaceTablePrefix and support logic table replace prefix (#18117)" (#18233)
    
    This reverts commit 012a8672
---
 .../rule/ShardingAutoTableRuleConfiguration.java   |  2 +-
 .../rule/ShardingTableRuleConfiguration.java       |  2 +-
 .../shardingsphere/sharding/rule/ShardingRule.java | 93 +++++++---------------
 .../shardingsphere/sharding/rule/TableRule.java    | 36 ++++-----
 .../YamlShardingAutoTableRuleConfiguration.java    |  2 +-
 .../config/rule/YamlTableRuleConfiguration.java    |  2 +-
 ...rdingAutoTableRuleConfigurationYamlSwapper.java |  4 +-
 .../ShardingTableRuleConfigurationYamlSwapper.java |  4 +-
 .../sharding/rule/TableRuleTest.java               |  4 +-
 ...gAutoTableRuleConfigurationYamlSwapperTest.java |  4 +-
 .../handler/checker/BindingTableCheckedConfig.java |  2 +
 11 files changed, 62 insertions(+), 93 deletions(-)

diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-api/src/main/java/org/apache/shardingsphere/sharding/api/config/rule/ShardingAutoTableRuleConfiguration.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-api/src/main/java/org/apache/shardingsphere/sharding/api/config/rule/ShardingAutoTableRuleConfiguration.java
index bab2507eda2..5fda87e8fb1 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-api/src/main/java/org/apache/shardingsphere/sharding/api/config/rule/ShardingAutoTableRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-api/src/main/java/org/apache/shardingsphere/sharding/api/config/rule/ShardingAutoTableRuleConfiguration.java
@@ -35,7 +35,7 @@ public final class ShardingAutoTableRuleConfiguration {
     
     private final String actualDataSources;
     
-    private String replaceTablePrefix;
+    private String actualTablePrefix;
     
     private ShardingStrategyConfiguration shardingStrategy;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-api/src/main/java/org/apache/shardingsphere/sharding/api/config/rule/ShardingTableRuleConfiguration.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-api/src/main/java/org/apache/shardingsphere/sharding/api/config/rule/ShardingTableRuleConfiguration.java
index 47abfa7f558..690e8fdda4d 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-api/src/main/java/org/apache/shardingsphere/sharding/api/config/rule/ShardingTableRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-api/src/main/java/org/apache/shardingsphere/sharding/api/config/rule/ShardingTableRuleConfiguration.java
@@ -35,7 +35,7 @@ public final class ShardingTableRuleConfiguration {
     
     private final String actualDataNodes;
     
-    private String replaceTablePrefix;
+    private String actualTablePrefix;
     
     private ShardingStrategyConfiguration databaseShardingStrategy;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index 4d63d170a47..441ec5e0fc5 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -72,7 +72,6 @@ import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.TreeSet;
@@ -113,11 +112,11 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
     
     public ShardingRule(final ShardingRuleConfiguration config, final Collection<String> dataSourceNames) {
         this.dataSourceNames = getDataSourceNames(config.getTables(), config.getAutoTables(), dataSourceNames);
-        shardingAlgorithms.putAll(createShardingAlgorithms(config.getShardingAlgorithms(), config.getTables(), config.getAutoTables()));
+        config.getShardingAlgorithms().forEach((key, value) -> shardingAlgorithms.put(key, createShardingAlgorithm(key, value, config.getTables(), config.getAutoTables())));
         config.getKeyGenerators().forEach((key, value) -> keyGenerators.put(key, KeyGenerateAlgorithmFactory.newInstance(value)));
         tableRules.putAll(createTableRules(config.getTables(), config.getDefaultKeyGenerateStrategy()));
         tableRules.putAll(createAutoTableRules(config.getAutoTables(), config.getDefaultKeyGenerateStrategy()));
-        bindingTableRules.putAll(createBindingTableRules(config.getBindingTableGroups(), config.getTables(), config.getAutoTables(), tableRules));
+        bindingTableRules.putAll(createBindingTableRules(config.getBindingTableGroups()));
         broadcastTables = createBroadcastTables(config.getBroadcastTables());
         defaultDatabaseShardingStrategyConfig = null == config.getDefaultDatabaseShardingStrategy() ? new NoneShardingStrategyConfiguration() : config.getDefaultDatabaseShardingStrategy();
         defaultTableShardingStrategyConfig = null == config.getDefaultTableShardingStrategy() ? new NoneShardingStrategyConfiguration() : config.getDefaultTableShardingStrategy();
@@ -126,7 +125,7 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
                 : keyGenerators.get(config.getDefaultKeyGenerateStrategy().getKeyGeneratorName());
         defaultShardingColumn = config.getDefaultShardingColumn();
         shardingTableDataNodes = createShardingTableDataNodes(tableRules);
-        Preconditions.checkArgument(isValidBindingTableConfiguration(bindingTableRules, new BindingTableCheckedConfig(this.dataSourceNames, shardingAlgorithms,
+        Preconditions.checkArgument(isValidBindingTableConfiguration(tableRules, new BindingTableCheckedConfig(this.dataSourceNames, shardingAlgorithms, config.getBindingTableGroups(),
                 broadcastTables, defaultDatabaseShardingStrategyConfig, defaultTableShardingStrategyConfig, defaultShardingColumn)),
                 "Invalid binding table configuration in ShardingRuleConfiguration.");
     }
@@ -137,7 +136,7 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
         keyGenerators.putAll(config.getKeyGenerators());
         tableRules.putAll(createTableRules(config.getTables(), config.getDefaultKeyGenerateStrategy()));
         tableRules.putAll(createAutoTableRules(config.getAutoTables(), config.getDefaultKeyGenerateStrategy()));
-        bindingTableRules.putAll(createBindingTableRules(config.getBindingTableGroups(), config.getTables(), config.getAutoTables(), tableRules));
+        bindingTableRules.putAll(createBindingTableRules(config.getBindingTableGroups()));
         broadcastTables = createBroadcastTables(config.getBroadcastTables());
         defaultDatabaseShardingStrategyConfig = null == config.getDefaultDatabaseShardingStrategy() ? new NoneShardingStrategyConfiguration() : config.getDefaultDatabaseShardingStrategy();
         defaultTableShardingStrategyConfig = null == config.getDefaultTableShardingStrategy() ? new NoneShardingStrategyConfiguration() : config.getDefaultTableShardingStrategy();
@@ -146,7 +145,7 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
                 : keyGenerators.get(config.getDefaultKeyGenerateStrategy().getKeyGeneratorName());
         defaultShardingColumn = config.getDefaultShardingColumn();
         shardingTableDataNodes = createShardingTableDataNodes(tableRules);
-        Preconditions.checkArgument(isValidBindingTableConfiguration(bindingTableRules, new BindingTableCheckedConfig(this.dataSourceNames, shardingAlgorithms,
+        Preconditions.checkArgument(isValidBindingTableConfiguration(tableRules, new BindingTableCheckedConfig(this.dataSourceNames, shardingAlgorithms, config.getBindingTableGroups(),
                 broadcastTables, defaultDatabaseShardingStrategyConfig, defaultTableShardingStrategyConfig, defaultShardingColumn)),
                 "Invalid binding table configuration in ShardingRuleConfiguration.");
     }
@@ -163,7 +162,6 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
         config.getShardingAlgorithms().forEach((key, value) -> shardingAlgorithms.put(key, ShardingAlgorithmFactory.newInstance(value)));
         tableRules.putAll(createTableRules(config.getTables(), config.getDefaultKeyGenerateStrategy(), allDataSourceNames));
         tableRules.putAll(createAutoTableRules(config.getAutoTables(), shardingAlgorithms, config.getDefaultKeyGenerateStrategy(), allDataSourceNames));
-        Map<String, BindingTableRule> bindingTableRules = createBindingTableRules(config.getBindingTableGroups(), config.getTables(), config.getAutoTables(), tableRules);
         Collection<String> broadcastTables = createBroadcastTables(config.getBroadcastTables());
         ShardingStrategyConfiguration defaultDatabaseShardingStrategyConfig = null == config.getDefaultDatabaseShardingStrategy()
                 ? new NoneShardingStrategyConfiguration()
@@ -171,7 +169,7 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
         ShardingStrategyConfiguration defaultTableShardingStrategyConfig = null == config.getDefaultTableShardingStrategy()
                 ? new NoneShardingStrategyConfiguration()
                 : config.getDefaultTableShardingStrategy();
-        return isValidBindingTableConfiguration(bindingTableRules, new BindingTableCheckedConfig(allDataSourceNames, shardingAlgorithms, broadcastTables,
+        return isValidBindingTableConfiguration(tableRules, new BindingTableCheckedConfig(allDataSourceNames, shardingAlgorithms, config.getBindingTableGroups(), broadcastTables,
                 defaultDatabaseShardingStrategyConfig, defaultTableShardingStrategyConfig, config.getDefaultShardingColumn()));
     }
     
@@ -253,12 +251,10 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
         return result;
     }
     
-    private Map<String, BindingTableRule> createBindingTableRules(final Collection<String> bindingTableGroups, final Collection<ShardingTableRuleConfiguration> tables,
-                                                                  final Collection<ShardingAutoTableRuleConfiguration> autoTables, final Map<String, TableRule> tableRules) {
-        Map<String, String> logicTableReplaceTablePrefixMap = getLogicTableReplaceTablePrefixMap(tables, autoTables);
+    private Map<String, BindingTableRule> createBindingTableRules(final Collection<String> bindingTableGroups) {
         Map<String, BindingTableRule> result = new LinkedHashMap<>();
         for (String each : bindingTableGroups) {
-            BindingTableRule bindingTableRule = createBindingTableRule(each, tableRules, logicTableReplaceTablePrefixMap);
+            BindingTableRule bindingTableRule = createBindingTableRule(each);
             for (String logicTable : bindingTableRule.getAllLogicTables()) {
                 result.put(logicTable.toLowerCase(), bindingTableRule);
             }
@@ -266,45 +262,24 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
         return result;
     }
     
-    private Map<String, String> getLogicTableReplaceTablePrefixMap(final Collection<ShardingTableRuleConfiguration> tables,
-                                                                   final Collection<ShardingAutoTableRuleConfiguration> autoTables) {
-        Map<String, String> result = new LinkedHashMap<>(tables.size() + autoTables.size(), 1);
-        for (ShardingTableRuleConfiguration each : tables) {
-            if (null != each.getReplaceTablePrefix()) {
-                result.put(each.getLogicTable(), each.getReplaceTablePrefix());
-            }
-        }
-        for (ShardingAutoTableRuleConfiguration each : autoTables) {
-            if (null != each.getReplaceTablePrefix()) {
-                result.put(each.getLogicTable(), each.getReplaceTablePrefix());
-            }
-        }
-        return result;
-    }
-    
-    private BindingTableRule createBindingTableRule(final String bindingTableGroup, final Map<String, TableRule> tableRules,
-                                                    final Map<String, String> logicTableReplaceTablePrefixMap) {
+    private BindingTableRule createBindingTableRule(final String bindingTableGroup) {
+        Map<String, TableRule> tableRules = Splitter.on(",").trimResults().splitToList(bindingTableGroup).stream()
+                .map(this::getTableRule).collect(Collectors.toMap(each -> each.getLogicTable().toLowerCase(), Function.identity(), (oldValue, currentValue) -> oldValue, LinkedHashMap::new));
         BindingTableRule result = new BindingTableRule();
-        for (String each : Splitter.on(",").trimResults().splitToList(bindingTableGroup)) {
-            String replaceTablePrefix = logicTableReplaceTablePrefixMap.get(each);
-            String logicTable = Strings.isNullOrEmpty(replaceTablePrefix) ? each : replaceTablePrefix + each;
-            TableRule tableRule = Optional.ofNullable(tableRules.get(logicTable.toLowerCase()))
-                    .orElseThrow(() -> new ShardingSphereConfigurationException("Cannot find table rule with logic table: '%s'", logicTable));
-            result.getTableRules().put(tableRule.getLogicTable().toLowerCase(), tableRule);
-        }
+        result.getTableRules().putAll(tableRules);
         return result;
     }
     
-    private boolean isValidBindingTableConfiguration(final Map<String, BindingTableRule> bindingTableRules, final BindingTableCheckedConfig checkedConfig) {
-        for (BindingTableRule each : new HashSet<>(bindingTableRules.values())) {
-            Collection<TableRule> bindingTables = each.getTableRules().values();
+    private boolean isValidBindingTableConfiguration(final Map<String, TableRule> tableRules, final BindingTableCheckedConfig checkedConfig) {
+        for (String each : checkedConfig.getBindingTableGroups()) {
+            Collection<String> bindingTables = Splitter.on(",").trimResults().splitToList(each.toLowerCase());
             if (bindingTables.size() <= 1) {
                 continue;
             }
-            Iterator<TableRule> iterator = bindingTables.iterator();
-            TableRule sampleTableRule = iterator.next();
+            Iterator<String> iterator = bindingTables.iterator();
+            TableRule sampleTableRule = getTableRule(iterator.next(), checkedConfig.getDataSourceNames(), tableRules, checkedConfig.getBroadcastTables());
             while (iterator.hasNext()) {
-                TableRule tableRule = iterator.next();
+                TableRule tableRule = getTableRule(iterator.next(), checkedConfig.getDataSourceNames(), tableRules, checkedConfig.getBroadcastTables());
                 if (!isValidActualDatasourceName(sampleTableRule, tableRule) || !isValidActualTableName(sampleTableRule, tableRule)) {
                     return false;
                 }
@@ -837,37 +812,29 @@ public final class ShardingRule implements SchemaRule, DataNodeContainedRule, Ta
         }
     }
     
-    private Map<String, ShardingAlgorithm> createShardingAlgorithms(final Map<String, ShardingSphereAlgorithmConfiguration> shardingAlgorithms,
-                                                                    final Collection<ShardingTableRuleConfiguration> tables, final Collection<ShardingAutoTableRuleConfiguration> autoTables) {
-        Map<String, String> algorithmReplaceTablePrefixMap = getAlgorithmReplaceTablePrefixMap(tables, autoTables);
-        Map<String, ShardingAlgorithm> result = new LinkedHashMap<>(shardingAlgorithms.size(), 1);
-        for (Entry<String, ShardingSphereAlgorithmConfiguration> entry : shardingAlgorithms.entrySet()) {
-            result.put(entry.getKey(), createShardingAlgorithm(entry.getKey(), entry.getValue(), algorithmReplaceTablePrefixMap));
-        }
-        return result;
-    }
-    
-    private ShardingAlgorithm createShardingAlgorithm(final String name, final ShardingSphereAlgorithmConfiguration config, final Map<String, String> algorithmReplaceTablePrefixMap) {
-        if (algorithmReplaceTablePrefixMap.containsKey(name)) {
+    private ShardingAlgorithm createShardingAlgorithm(final String name, final ShardingSphereAlgorithmConfiguration config, final Collection<ShardingTableRuleConfiguration> tables,
+                                                      final Collection<ShardingAutoTableRuleConfiguration> autoTables) {
+        Map<String, String> algorithmTablePrefixMap = getAlgorithmTablePrefixMap(tables, autoTables);
+        if (algorithmTablePrefixMap.containsKey(name)) {
             String algorithmExpression = config.getProps().getProperty(ALGORITHM_EXPRESSION_KEY);
-            String replaceTablePrefix = algorithmReplaceTablePrefixMap.get(name);
-            if (!Strings.isNullOrEmpty(algorithmExpression) && !algorithmExpression.startsWith(replaceTablePrefix)) {
-                config.getProps().setProperty(ALGORITHM_EXPRESSION_KEY, replaceTablePrefix + algorithmExpression);
+            String actualTablePrefix = algorithmTablePrefixMap.get(name);
+            if (!Strings.isNullOrEmpty(algorithmExpression) && !algorithmExpression.startsWith(actualTablePrefix)) {
+                config.getProps().setProperty(ALGORITHM_EXPRESSION_KEY, actualTablePrefix + algorithmExpression);
             }
         }
         return ShardingAlgorithmFactory.newInstance(config);
     }
     
-    private Map<String, String> getAlgorithmReplaceTablePrefixMap(final Collection<ShardingTableRuleConfiguration> tables, final Collection<ShardingAutoTableRuleConfiguration> autoTables) {
+    private Map<String, String> getAlgorithmTablePrefixMap(final Collection<ShardingTableRuleConfiguration> tables, final Collection<ShardingAutoTableRuleConfiguration> autoTables) {
         Map<String, String> result = new LinkedHashMap<>(tables.size() + autoTables.size(), 1);
         for (ShardingTableRuleConfiguration each : tables) {
-            if (null != each.getReplaceTablePrefix() && null != each.getTableShardingStrategy()) {
-                result.put(each.getTableShardingStrategy().getShardingAlgorithmName(), each.getReplaceTablePrefix());
+            if (null != each.getActualTablePrefix() && null != each.getTableShardingStrategy()) {
+                result.put(each.getTableShardingStrategy().getShardingAlgorithmName(), each.getActualTablePrefix());
             }
         }
         for (ShardingAutoTableRuleConfiguration each : autoTables) {
-            if (null != each.getReplaceTablePrefix() && null != each.getShardingStrategy()) {
-                result.put(each.getShardingStrategy().getShardingAlgorithmName(), each.getReplaceTablePrefix());
+            if (null != each.getActualTablePrefix() && null != each.getShardingStrategy()) {
+                result.put(each.getShardingStrategy().getShardingAlgorithmName(), each.getActualTablePrefix());
             }
         }
         return result;
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/TableRule.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/TableRule.java
index 3834e789d9d..6a17a78c962 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/TableRule.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/TableRule.java
@@ -53,7 +53,7 @@ import java.util.stream.Collectors;
  * Table rule.
  */
 @Getter
-@ToString(exclude = {"dataNodeIndexMap", "actualTables", "replaceTablePrefix", "actualDatasourceNames", "datasourceToTablesMap", "dataSourceDataNode", "tableDataNode"})
+@ToString(exclude = {"dataNodeIndexMap", "actualTables", "actualTablePrefix", "actualDatasourceNames", "datasourceToTablesMap", "dataSourceDataNode", "tableDataNode"})
 public final class TableRule {
     
     private static final Pattern DATA_NODE_SUFFIX_PATTERN = Pattern.compile("\\d+$");
@@ -64,7 +64,7 @@ public final class TableRule {
     
     private final List<DataNode> actualDataNodes;
     
-    private final String replaceTablePrefix;
+    private final String actualTablePrefix;
     
     @Getter(AccessLevel.NONE)
     private final Set<String> actualTables;
@@ -92,7 +92,7 @@ public final class TableRule {
     public TableRule(final Collection<String> dataSourceNames, final String logicTableName) {
         logicTable = logicTableName;
         dataNodeIndexMap = new HashMap<>(dataSourceNames.size(), 1);
-        replaceTablePrefix = null;
+        actualTablePrefix = null;
         actualDataNodes = generateDataNodes(logicTableName, dataSourceNames, null);
         actualTables = getActualTables();
         databaseShardingStrategyConfig = null;
@@ -104,12 +104,12 @@ public final class TableRule {
     }
     
     public TableRule(final ShardingTableRuleConfiguration tableRuleConfig, final Collection<String> dataSourceNames, final String defaultGenerateKeyColumn) {
-        replaceTablePrefix = tableRuleConfig.getReplaceTablePrefix();
-        logicTable = Strings.isNullOrEmpty(replaceTablePrefix) ? tableRuleConfig.getLogicTable() : replaceTablePrefix + tableRuleConfig.getLogicTable();
+        logicTable = tableRuleConfig.getLogicTable();
         List<String> dataNodes = new InlineExpressionParser(tableRuleConfig.getActualDataNodes()).splitAndEvaluate();
         dataNodeIndexMap = new HashMap<>(dataNodes.size(), 1);
-        actualDataNodes = isEmptyDataNodes(dataNodes) ? generateDataNodes(tableRuleConfig.getLogicTable(), dataSourceNames, replaceTablePrefix)
-                : generateDataNodes(dataNodes, dataSourceNames, replaceTablePrefix);
+        actualTablePrefix = tableRuleConfig.getActualTablePrefix();
+        actualDataNodes = isEmptyDataNodes(dataNodes) ? generateDataNodes(tableRuleConfig.getLogicTable(), dataSourceNames, actualTablePrefix)
+                : generateDataNodes(dataNodes, dataSourceNames, actualTablePrefix);
         actualTables = getActualTables();
         databaseShardingStrategyConfig = tableRuleConfig.getDatabaseShardingStrategy();
         tableShardingStrategyConfig = tableRuleConfig.getTableShardingStrategy();
@@ -123,14 +123,14 @@ public final class TableRule {
     
     public TableRule(final ShardingAutoTableRuleConfiguration tableRuleConfig, final Collection<String> dataSourceNames,
                      final ShardingAutoTableAlgorithm shardingAutoTableAlgorithm, final String defaultGenerateKeyColumn) {
-        replaceTablePrefix = tableRuleConfig.getReplaceTablePrefix();
-        logicTable = Strings.isNullOrEmpty(replaceTablePrefix) ? tableRuleConfig.getLogicTable() : replaceTablePrefix + tableRuleConfig.getLogicTable();
+        logicTable = tableRuleConfig.getLogicTable();
         databaseShardingStrategyConfig = new NoneShardingStrategyConfiguration();
         tableShardingStrategyConfig = tableRuleConfig.getShardingStrategy();
         List<String> dataNodes = getDataNodes(tableRuleConfig, shardingAutoTableAlgorithm, dataSourceNames);
         dataNodeIndexMap = new HashMap<>(dataNodes.size(), 1);
-        actualDataNodes = isEmptyDataNodes(dataNodes) ? generateDataNodes(tableRuleConfig.getLogicTable(), dataSourceNames, replaceTablePrefix)
-                : generateDataNodes(dataNodes, dataSourceNames, replaceTablePrefix);
+        actualTablePrefix = tableRuleConfig.getActualTablePrefix();
+        actualDataNodes = isEmptyDataNodes(dataNodes) ? generateDataNodes(tableRuleConfig.getLogicTable(), dataSourceNames, actualTablePrefix)
+                : generateDataNodes(dataNodes, dataSourceNames, actualTablePrefix);
         actualTables = getActualTables();
         KeyGenerateStrategyConfiguration keyGeneratorConfig = tableRuleConfig.getKeyGenerateStrategy();
         generateKeyColumn = null != keyGeneratorConfig && !Strings.isNullOrEmpty(keyGeneratorConfig.getColumn()) ? keyGeneratorConfig.getColumn() : defaultGenerateKeyColumn;
@@ -185,11 +185,11 @@ public final class TableRule {
         return null == dataNodes || dataNodes.isEmpty();
     }
     
-    private List<DataNode> generateDataNodes(final String logicTable, final Collection<String> dataSourceNames, final String replaceTablePrefix) {
+    private List<DataNode> generateDataNodes(final String logicTable, final Collection<String> dataSourceNames, final String actualTablePrefix) {
         List<DataNode> result = new LinkedList<>();
         int index = 0;
         for (String each : dataSourceNames) {
-            String actualTable = Strings.isNullOrEmpty(replaceTablePrefix) ? logicTable : replaceTablePrefix + logicTable;
+            String actualTable = Strings.isNullOrEmpty(actualTablePrefix) ? logicTable : actualTablePrefix + logicTable;
             DataNode dataNode = new DataNode(each, actualTable);
             result.add(dataNode);
             dataNodeIndexMap.put(dataNode, index);
@@ -200,11 +200,11 @@ public final class TableRule {
         return result;
     }
     
-    private List<DataNode> generateDataNodes(final List<String> actualDataNodes, final Collection<String> dataSourceNames, final String replaceTablePrefix) {
+    private List<DataNode> generateDataNodes(final List<String> actualDataNodes, final Collection<String> dataSourceNames, final String actualTablePrefix) {
         List<DataNode> result = new LinkedList<>();
         int index = 0;
         for (String each : actualDataNodes) {
-            DataNode dataNode = generateDataNode(each, replaceTablePrefix);
+            DataNode dataNode = generateDataNode(each, actualTablePrefix);
             if (!dataSourceNames.contains(dataNode.getDataSourceName())) {
                 throw new ShardingSphereException("Cannot find data source in sharding rule, invalid actual data node is: '%s'", each);
             }
@@ -217,12 +217,12 @@ public final class TableRule {
         return result;
     }
     
-    private DataNode generateDataNode(final String dataNode, final String replaceTablePrefix) {
+    private DataNode generateDataNode(final String dataNode, final String actualTablePrefix) {
         DataNode result = new DataNode(dataNode);
-        if (Strings.isNullOrEmpty(replaceTablePrefix) || result.getTableName().startsWith(replaceTablePrefix)) {
+        if (Strings.isNullOrEmpty(actualTablePrefix)) {
             return result;
         }
-        return new DataNode(result.getDataSourceName(), replaceTablePrefix + result.getTableName());
+        return new DataNode(result.getDataSourceName(), actualTablePrefix + result.getTableName());
     }
     
     /**
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/rule/YamlShardingAutoTableRuleConfiguration.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/rule/YamlShardingAutoTableRuleConfiguration.java
index 35c81e9774c..14d8ac3f5f4 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/rule/YamlShardingAutoTableRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/rule/YamlShardingAutoTableRuleConfiguration.java
@@ -34,7 +34,7 @@ public final class YamlShardingAutoTableRuleConfiguration implements YamlConfigu
     
     private String actualDataSources;
     
-    private String replaceTablePrefix;
+    private String actualTablePrefix;
     
     private YamlShardingStrategyConfiguration shardingStrategy;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/rule/YamlTableRuleConfiguration.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/rule/YamlTableRuleConfiguration.java
index b3f5210d3ec..abeb4ac9a6d 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/rule/YamlTableRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/rule/YamlTableRuleConfiguration.java
@@ -34,7 +34,7 @@ public final class YamlTableRuleConfiguration implements YamlConfiguration {
     
     private String actualDataNodes;
     
-    private String replaceTablePrefix;
+    private String actualTablePrefix;
     
     private YamlShardingStrategyConfiguration databaseStrategy;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/rule/ShardingAutoTableRuleConfigurationYamlSwapper.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/rule/ShardingAutoTableRuleConfigurationYamlSwapper.java
index 934377d9575..a6a903cc064 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/rule/ShardingAutoTableRuleConfigurationYamlSwapper.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/rule/ShardingAutoTableRuleConfigurationYamlSwapper.java
@@ -38,7 +38,7 @@ public final class ShardingAutoTableRuleConfigurationYamlSwapper implements Yaml
         YamlShardingAutoTableRuleConfiguration result = new YamlShardingAutoTableRuleConfiguration();
         result.setLogicTable(data.getLogicTable());
         result.setActualDataSources(data.getActualDataSources());
-        result.setReplaceTablePrefix(data.getReplaceTablePrefix());
+        result.setActualTablePrefix(data.getActualTablePrefix());
         if (null != data.getShardingStrategy()) {
             result.setShardingStrategy(shardingStrategyYamlSwapper.swapToYamlConfiguration(data.getShardingStrategy()));
         }
@@ -52,7 +52,7 @@ public final class ShardingAutoTableRuleConfigurationYamlSwapper implements Yaml
     public ShardingAutoTableRuleConfiguration swapToObject(final YamlShardingAutoTableRuleConfiguration yamlConfig) {
         Preconditions.checkNotNull(yamlConfig.getLogicTable(), "Logic table cannot be null.");
         ShardingAutoTableRuleConfiguration result = new ShardingAutoTableRuleConfiguration(yamlConfig.getLogicTable(), yamlConfig.getActualDataSources());
-        result.setReplaceTablePrefix(yamlConfig.getReplaceTablePrefix());
+        result.setActualTablePrefix(yamlConfig.getActualTablePrefix());
         if (null != yamlConfig.getShardingStrategy()) {
             result.setShardingStrategy(shardingStrategyYamlSwapper.swapToObject(yamlConfig.getShardingStrategy()));
         }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/rule/ShardingTableRuleConfigurationYamlSwapper.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/rule/ShardingTableRuleConfigurationYamlSwapper.java
index 1bed4503944..bbc7731888e 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/rule/ShardingTableRuleConfigurationYamlSwapper.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/rule/ShardingTableRuleConfigurationYamlSwapper.java
@@ -38,7 +38,7 @@ public final class ShardingTableRuleConfigurationYamlSwapper implements YamlConf
         YamlTableRuleConfiguration result = new YamlTableRuleConfiguration();
         result.setLogicTable(data.getLogicTable());
         result.setActualDataNodes(data.getActualDataNodes());
-        result.setReplaceTablePrefix(data.getReplaceTablePrefix());
+        result.setActualTablePrefix(data.getActualTablePrefix());
         if (null != data.getDatabaseShardingStrategy()) {
             result.setDatabaseStrategy(shardingStrategyYamlSwapper.swapToYamlConfiguration(data.getDatabaseShardingStrategy()));
         }
@@ -55,7 +55,7 @@ public final class ShardingTableRuleConfigurationYamlSwapper implements YamlConf
     public ShardingTableRuleConfiguration swapToObject(final YamlTableRuleConfiguration yamlConfig) {
         Preconditions.checkNotNull(yamlConfig.getLogicTable(), "Logic table cannot be null.");
         ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration(yamlConfig.getLogicTable(), yamlConfig.getActualDataNodes());
-        result.setReplaceTablePrefix(yamlConfig.getReplaceTablePrefix());
+        result.setActualTablePrefix(yamlConfig.getActualTablePrefix());
         if (null != yamlConfig.getDatabaseStrategy()) {
             result.setDatabaseShardingStrategy(shardingStrategyYamlSwapper.swapToObject(yamlConfig.getDatabaseStrategy()));
         }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/TableRuleTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/TableRuleTest.java
index ea71c11e380..6eace0e0b1a 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/TableRuleTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/TableRuleTest.java
@@ -182,7 +182,7 @@ public final class TableRuleTest {
     @Test
     public void assertDatNodeGroupsWhenShardingTableConfigActualTablePrefix() {
         ShardingTableRuleConfiguration shardingTableRuleConfig = new ShardingTableRuleConfiguration("t_order", "ds_${0..1}.t_order_${0..1}");
-        shardingTableRuleConfig.setReplaceTablePrefix("tmp_");
+        shardingTableRuleConfig.setActualTablePrefix("tmp_");
         TableRule tableRule = new TableRule(shardingTableRuleConfig, Arrays.asList("ds_0", "ds_1"), "order_id");
         Map<String, List<DataNode>> actual = tableRule.getDataNodeGroups();
         assertThat(actual.size(), is(2));
@@ -195,7 +195,7 @@ public final class TableRuleTest {
     @Test
     public void assertDatNodeGroupsWhenShardingAutoTableConfigActualTablePrefix() {
         ShardingAutoTableRuleConfiguration shardingTableRuleConfig = new ShardingAutoTableRuleConfiguration("t_order", "ds_${0..1}");
-        shardingTableRuleConfig.setReplaceTablePrefix("tmp_");
+        shardingTableRuleConfig.setActualTablePrefix("tmp_");
         shardingTableRuleConfig.setShardingStrategy(new StandardShardingStrategyConfiguration("order_id", "mod"));
         ModShardingAlgorithm modShardingAlgorithm = createModShardingAlgorithm();
         TableRule tableRule = new TableRule(shardingTableRuleConfig, Arrays.asList("ds_0", "ds_1"), modShardingAlgorithm, "order_id");
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/swapper/rule/ShardingAutoTableRuleConfigurationYamlSwapperTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/swapper/rule/ShardingAutoTableRuleConfigurationYamlSwapperTest.java
index c92a0576054..6962c95eb46 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/swapper/rule/ShardingAutoTableRuleConfigurationYamlSwapperTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/swapper/rule/ShardingAutoTableRuleConfigurationYamlSwapperTest.java
@@ -80,13 +80,13 @@ public final class ShardingAutoTableRuleConfigurationYamlSwapperTest {
     @Test
     public void assertSwapToYamlWithMaxProperties() {
         ShardingAutoTableRuleConfiguration shardingTableRuleConfig = new ShardingAutoTableRuleConfiguration("tbl", "ds0,ds1");
-        shardingTableRuleConfig.setReplaceTablePrefix("tmp_");
+        shardingTableRuleConfig.setActualTablePrefix("tmp_");
         shardingTableRuleConfig.setShardingStrategy(mock(StandardShardingStrategyConfiguration.class));
         shardingTableRuleConfig.setKeyGenerateStrategy(mock(KeyGenerateStrategyConfiguration.class));
         YamlShardingAutoTableRuleConfiguration actual = tableYamlSwapper.swapToYamlConfiguration(shardingTableRuleConfig);
         assertThat(actual.getLogicTable(), is("tbl"));
         assertThat(actual.getActualDataSources(), is("ds0,ds1"));
-        assertThat(actual.getReplaceTablePrefix(), is("tmp_"));
+        assertThat(actual.getActualTablePrefix(), is("tmp_"));
         assertNotNull(actual.getShardingStrategy());
         assertNotNull(actual.getKeyGenerateStrategy());
     }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/BindingTableCheckedConfig.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/BindingTableCheckedConfig.java
index 6db0ddc3abf..2e909236a2d 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/BindingTableCheckedConfig.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/BindingTableCheckedConfig.java
@@ -36,6 +36,8 @@ public final class BindingTableCheckedConfig {
     
     private final Map<String, ShardingAlgorithm> shardingAlgorithms;
     
+    private final Collection<String> bindingTableGroups;
+    
     private final Collection<String> broadcastTables;
     
     private final ShardingStrategyConfiguration defaultDatabaseShardingStrategyConfig;