cheese8 commented on a change in pull request #14864:
URL: https://github.com/apache/shardingsphere/pull/14864#discussion_r810092457
##########
File path:
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
##########
@@ -204,6 +208,105 @@ private BindingTableRule createBindingTableRule(final
String bindingTableGroup)
return result;
}
+ private void checkSameBindingTables(final Collection<String>
bindingTableGroups, final Map<String, BindingTableRule> bindingTableRules) {
+ if (null == bindingTableGroups || bindingTableGroups.isEmpty()) {
+ return;
+ }
+ for (String bindingTableGroup : bindingTableGroups) {
+ List<String> bindingTableList =
Splitter.on(",").trimResults().splitToList(bindingTableGroup.toLowerCase());
+ TableRule savedTableRule = null;
+ for (String bindingTable : bindingTableList) {
+ TableRule tableRule =
bindingTableRules.get(bindingTable).getTableRules().get(bindingTable);
+ if (null == savedTableRule) {
+ savedTableRule = tableRule;
+ } else {
+
checkSameActualDatasourceNamesAndActualTableIndex(savedTableRule, tableRule,
bindingTableGroup);
+ }
+ }
+ }
+ }
+
+ private void checkSameActualDatasourceNamesAndActualTableIndex(final
TableRule savedOne, final TableRule newOne, final String bindingTableGroup) {
+ if
(!savedOne.getActualDatasourceNames().containsAll(newOne.getActualDatasourceNames()))
{
+ throw new ShardingSphereConfigurationException("The
actualDatasourceNames on bindingTableGroup `%s` are inconsistent",
bindingTableGroup);
+ }
+ checkSameAlgorithmOnDatabase(savedOne, newOne,
savedOne.getActualDatasourceNames().stream().findFirst().get(),
bindingTableGroup);
+ for (String dataSourceName : savedOne.getActualDatasourceNames()) {
+ Collection<String> savedActualTableNames =
savedOne.getActualTableNames(dataSourceName).stream().map(each ->
substring(each)[1])
+ .filter(each ->
!each.isEmpty()).collect(Collectors.toList());
+ Collection<String> newOneActualTableNames =
newOne.getActualTableNames(dataSourceName).stream().map(each ->
substring(each)[1])
+ .filter(each ->
!each.isEmpty()).collect(Collectors.toList());
+ if (!savedActualTableNames.containsAll(newOneActualTableNames)) {
Review comment:
Yes, the code `stream().map(each -> substring(each)[1]).filter(each ->
!each.isEmpty())` the index substring out of the bindingTable, and then only
compare the index collections.
##########
File path:
shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
##########
@@ -204,6 +208,105 @@ private BindingTableRule createBindingTableRule(final
String bindingTableGroup)
return result;
}
+ private void checkSameBindingTables(final Collection<String>
bindingTableGroups, final Map<String, BindingTableRule> bindingTableRules) {
+ if (null == bindingTableGroups || bindingTableGroups.isEmpty()) {
+ return;
+ }
+ for (String bindingTableGroup : bindingTableGroups) {
+ List<String> bindingTableList =
Splitter.on(",").trimResults().splitToList(bindingTableGroup.toLowerCase());
+ TableRule savedTableRule = null;
+ for (String bindingTable : bindingTableList) {
+ TableRule tableRule =
bindingTableRules.get(bindingTable).getTableRules().get(bindingTable);
+ if (null == savedTableRule) {
+ savedTableRule = tableRule;
+ } else {
+
checkSameActualDatasourceNamesAndActualTableIndex(savedTableRule, tableRule,
bindingTableGroup);
+ }
+ }
+ }
+ }
+
+ private void checkSameActualDatasourceNamesAndActualTableIndex(final
TableRule savedOne, final TableRule newOne, final String bindingTableGroup) {
+ if
(!savedOne.getActualDatasourceNames().containsAll(newOne.getActualDatasourceNames()))
{
+ throw new ShardingSphereConfigurationException("The
actualDatasourceNames on bindingTableGroup `%s` are inconsistent",
bindingTableGroup);
+ }
+ checkSameAlgorithmOnDatabase(savedOne, newOne,
savedOne.getActualDatasourceNames().stream().findFirst().get(),
bindingTableGroup);
+ for (String dataSourceName : savedOne.getActualDatasourceNames()) {
+ Collection<String> savedActualTableNames =
savedOne.getActualTableNames(dataSourceName).stream().map(each ->
substring(each)[1])
+ .filter(each ->
!each.isEmpty()).collect(Collectors.toList());
+ Collection<String> newOneActualTableNames =
newOne.getActualTableNames(dataSourceName).stream().map(each ->
substring(each)[1])
+ .filter(each ->
!each.isEmpty()).collect(Collectors.toList());
+ if (!savedActualTableNames.containsAll(newOneActualTableNames)) {
+ throw new ShardingSphereConfigurationException("The
actualTableNames on bindingTableGroup `%s` are inconsistent",
bindingTableGroup);
+ }
+ checkSameAlgorithmOnTable(savedOne,
savedOne.getActualTableNames(dataSourceName).stream().findFirst().get(), newOne,
+
newOne.getActualTableNames(dataSourceName).stream().findFirst().get(),
bindingTableGroup);
+ }
+ }
+
+ private void checkSameAlgorithmOnDatabase(final TableRule savedOne, final
TableRule newOne, final String dataSourceName,
+ final String bindingTableGroup) {
+ Collection<String[]> args = new ArrayList<>();
Review comment:
ok
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]