Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/type/unicast/UnicastRoutingEngine.java +3 −10 Original line number Diff line number Diff line Loading @@ -17,14 +17,12 @@ package io.shardingjdbc.core.routing.type.unicast; import com.google.common.base.Preconditions; import io.shardingjdbc.core.parsing.parser.sql.SQLStatement; import io.shardingjdbc.core.routing.type.RoutingEngine; import io.shardingjdbc.core.routing.type.RoutingResult; import io.shardingjdbc.core.routing.type.TableUnit; import io.shardingjdbc.core.rule.DataNode; import io.shardingjdbc.core.rule.ShardingRule; import io.shardingjdbc.core.rule.TableRule; import lombok.RequiredArgsConstructor; /** Loading @@ -45,14 +43,9 @@ public final class UnicastRoutingEngine implements RoutingEngine { if (sqlStatement.getTables().isEmpty()) { result.getTableUnits().getTableUnits().add(new TableUnit(shardingRule.getDataSourceMap().keySet().iterator().next(), "", "")); } else if (sqlStatement.getTables().isSingleTable()) { TableRule tableRule = shardingRule.getTableRule(sqlStatement.getTables().getSingleTableName()); for (DataNode each : tableRule.getActualDataNodes()) { if (shardingRule.getDataSourceMap().containsKey(each.getDataSourceName())) { result.getTableUnits().getTableUnits().add(new TableUnit(each.getDataSourceName(), tableRule.getLogicTable(), each.getTableName())); break; } } Preconditions.checkState(1 == result.getTableUnits().getTableUnits().size(), String.format("Cannot find actual data node for logic table name: '%s'", tableRule.getLogicTable())); String logicTableName = sqlStatement.getTables().getSingleTableName(); DataNode dataNode = shardingRule.findDataNodeByLogicTable(logicTableName); result.getTableUnits().getTableUnits().add(new TableUnit(dataNode.getDataSourceName(), logicTableName, dataNode.getTableName())); } else { throw new UnsupportedOperationException("Cannot support unicast routing for multiple tables."); } Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rule/ShardingRule.java +16 −0 Original line number Diff line number Diff line Loading @@ -303,4 +303,20 @@ public final class ShardingRule { } throw new ShardingJdbcException("Cannot find logic table name with logic index name: '%s'", logicIndexName); } /** * Find data node by logic table. * * @param logicTableName logic table name * @return data node */ public DataNode findDataNodeByLogicTable(final String logicTableName) { TableRule tableRule = getTableRule(logicTableName); for (DataNode each : tableRule.getActualDataNodes()) { if (dataSourceMap.containsKey(each.getDataSourceName())) { return each; } } throw new ShardingJdbcException("Cannot find actual data node for logic table name: '%s'", tableRule.getLogicTable()); } } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/type/unicast/UnicastRoutingEngine.java +3 −10 Original line number Diff line number Diff line Loading @@ -17,14 +17,12 @@ package io.shardingjdbc.core.routing.type.unicast; import com.google.common.base.Preconditions; import io.shardingjdbc.core.parsing.parser.sql.SQLStatement; import io.shardingjdbc.core.routing.type.RoutingEngine; import io.shardingjdbc.core.routing.type.RoutingResult; import io.shardingjdbc.core.routing.type.TableUnit; import io.shardingjdbc.core.rule.DataNode; import io.shardingjdbc.core.rule.ShardingRule; import io.shardingjdbc.core.rule.TableRule; import lombok.RequiredArgsConstructor; /** Loading @@ -45,14 +43,9 @@ public final class UnicastRoutingEngine implements RoutingEngine { if (sqlStatement.getTables().isEmpty()) { result.getTableUnits().getTableUnits().add(new TableUnit(shardingRule.getDataSourceMap().keySet().iterator().next(), "", "")); } else if (sqlStatement.getTables().isSingleTable()) { TableRule tableRule = shardingRule.getTableRule(sqlStatement.getTables().getSingleTableName()); for (DataNode each : tableRule.getActualDataNodes()) { if (shardingRule.getDataSourceMap().containsKey(each.getDataSourceName())) { result.getTableUnits().getTableUnits().add(new TableUnit(each.getDataSourceName(), tableRule.getLogicTable(), each.getTableName())); break; } } Preconditions.checkState(1 == result.getTableUnits().getTableUnits().size(), String.format("Cannot find actual data node for logic table name: '%s'", tableRule.getLogicTable())); String logicTableName = sqlStatement.getTables().getSingleTableName(); DataNode dataNode = shardingRule.findDataNodeByLogicTable(logicTableName); result.getTableUnits().getTableUnits().add(new TableUnit(dataNode.getDataSourceName(), logicTableName, dataNode.getTableName())); } else { throw new UnsupportedOperationException("Cannot support unicast routing for multiple tables."); } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/rule/ShardingRule.java +16 −0 Original line number Diff line number Diff line Loading @@ -303,4 +303,20 @@ public final class ShardingRule { } throw new ShardingJdbcException("Cannot find logic table name with logic index name: '%s'", logicIndexName); } /** * Find data node by logic table. * * @param logicTableName logic table name * @return data node */ public DataNode findDataNodeByLogicTable(final String logicTableName) { TableRule tableRule = getTableRule(logicTableName); for (DataNode each : tableRule.getActualDataNodes()) { if (dataSourceMap.containsKey(each.getDataSourceName())) { return each; } } throw new ShardingJdbcException("Cannot find actual data node for logic table name: '%s'", tableRule.getLogicTable()); } }