diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRule.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRule.java index 6b9c57c7e6bb05cb3266c479b3fb2a496723f2ff..d5109af926d764325b04a795cb1d3b01485dbcc2 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRule.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRule.java @@ -181,6 +181,21 @@ public final class ShardingRule { return !bindingTables.isEmpty() && bindingTables.containsAll(logicTables); } + /** + * Adjust logic tables is all belong to default data source. + * + * @param logicTables names of logic tables + * @return logic tables is all belong to default data source + */ + public boolean isAllInDefaultDataSource(final Collection logicTables) { + for (String each : logicTables) { + if (tryFindTableRule(each).isPresent()) { + return false; + } + } + return true; + } + /** * Filter all binding tables. * diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/router/ParsingSQLRouter.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/router/ParsingSQLRouter.java index 6be7e69c7b35541fc6110521aa7da4251b7240ce..d72d981f1656cc119a62732003a2f678096f70b0 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/router/ParsingSQLRouter.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/routing/router/ParsingSQLRouter.java @@ -108,7 +108,7 @@ public final class ParsingSQLRouter implements SQLRouter { private RoutingResult route(final List parameters, final SQLStatement sqlStatement) { Collection tableNames = sqlStatement.getTables().getTableNames(); RoutingEngine routingEngine; - if (1 == tableNames.size() || shardingRule.isAllBindingTables(tableNames)) { + if (1 == tableNames.size() || shardingRule.isAllBindingTables(tableNames) || shardingRule.isAllInDefaultDataSource(tableNames)) { routingEngine = new SimpleRoutingEngine(shardingRule, parameters, tableNames.iterator().next(), sqlStatement); } else { // TODO config for cartesian set