int findActualTableIndex(final String dataSourceName, final String actualTableName) { DataNode dataNode = new DataNode(dataSourceName, actualTableName); return dataNodeIndexMap.containsKey(dataNode) ? dataNodeIndexMap.get(dataNode) : -1; }
public TableRule(final String defaultDataSourceName, final String logicTableName) { logicTable = logicTableName.toLowerCase(); actualDataNodes = Collections.singletonList(new DataNode(defaultDataSourceName, logicTableName)); dataNodeIndexMap = Collections.emptyMap(); databaseShardingStrategy = null; tableShardingStrategy = null; generateKeyColumn = null; shardingKeyGenerator = null; shardingEncryptorStrategy = null; logicIndex = null; }
private List<DataNode> generateDataNodes(final String logicTable, final Collection<String> dataSourceNames) { List<DataNode> result = new LinkedList<>(); int index = 0; for (String each : dataSourceNames) { DataNode dataNode = new DataNode(each, logicTable); result.add(dataNode); dataNodeIndexMap.put(dataNode, index); index++; } return result; }
private List<DataNode> generateDataNodes(final List<String> actualDataNodes, final Collection<String> dataSourceNames) { List<DataNode> result = new LinkedList<>(); int index = 0; for (String each : actualDataNodes) { DataNode dataNode = new DataNode(each); if (!dataSourceNames.contains(dataNode.getDataSourceName())) { throw new ShardingException("Cannot find data source in sharding rule, invalid actual data node is: '%s'", each); } result.add(dataNode); dataNodeIndexMap.put(dataNode, index); index++; } return result; }
private Collection<DataNode> routeTables(final TableRule tableRule, final String routedDataSource, final List<ShardingValue> tableShardingValues) { Collection<String> availableTargetTables = tableRule.getActualTableNames(routedDataSource); Collection<String> routedTables = new LinkedHashSet<>(tableShardingValues.isEmpty() ? availableTargetTables : shardingRule.getTableShardingStrategy(tableRule).doSharding(availableTargetTables, tableShardingValues)); Preconditions.checkState(!routedTables.isEmpty(), "no table route info"); Collection<DataNode> result = new LinkedList<>(); for (String each : routedTables) { result.add(new DataNode(routedDataSource, each)); } return result; }