private Map<String, List<DataNode>> getDataNodeGroups(final String logicTableName, final ShardingRule shardingRule) { Map<String, List<DataNode>> result = shardingRule.getTableRule(logicTableName).getDataNodeGroups(); if (isCheckingMetaData) { return result; } String firstKey = result.keySet().iterator().next(); return Collections.singletonMap(firstKey, Collections.singletonList(result.get(firstKey).get(0))); }
private BindingTableRule createBindingTableRule(final String bindingTableGroup) { List<TableRule> tableRules = new LinkedList<>(); for (String each : Splitter.on(",").trimResults().splitToList(bindingTableGroup)) { tableRules.add(getTableRule(each)); } return new BindingTableRule(tableRules); }
/** * Find data node by logic table name. * * @param logicTableName logic table name * @return data node */ public DataNode getDataNode(final String logicTableName) { TableRule tableRule = getTableRule(logicTableName); return tableRule.getActualDataNodes().get(0); }
@Override public RoutingResult route() { return generateRoutingResult(getDataNodes(shardingRule.getTableRule(logicTableName))); }
private Collection<TableUnit> getAllTableUnits(final String logicTableName) { Collection<TableUnit> result = new LinkedList<>(); TableRule tableRule = shardingRule.getTableRule(logicTableName); for (DataNode each : tableRule.getActualDataNodes()) { TableUnit tableUnit = new TableUnit(each.getDataSourceName()); tableUnit.getRoutingTables().add(new RoutingTable(logicTableName, each.getTableName())); result.add(tableUnit); } return result; } }
/** * Find data node by data source and logic table. * * @param dataSourceName data source name * @param logicTableName logic table name * @return data node */ public DataNode getDataNode(final String dataSourceName, final String logicTableName) { TableRule tableRule = getTableRule(logicTableName); for (DataNode each : tableRule.getActualDataNodes()) { if (shardingDataSourceNames.getDataSourceNames().contains(each.getDataSourceName()) && each.getDataSourceName().equals(dataSourceName)) { return each; } } throw new ShardingConfigurationException("Cannot find actual data node for data source name: '%s' and logic table name: '%s'", dataSourceName, logicTableName); }
boolean first = true; for (String each : logicTables) { TableRule tableRule = shardingRule.getTableRule(each); DataNode dataNode = tableRule.getActualDataNodes().get(0); routingTables.add(new RoutingTable(each, dataNode.getTableName()));
private void parseForceIndex(final String tableName, final SQLStatement sqlStatement) { boolean skipIfForce = lexerEngine.skipIfEqual(MySQLKeyword.FORCE) && this.lexerEngine.skipIfEqual(DefaultKeyword.INDEX); if (skipIfForce) { lexerEngine.accept(Symbol.LEFT_PAREN); do { lexerEngine.skipIfEqual(Symbol.COMMA); String literals = lexerEngine.getCurrentToken().getLiterals(); Preconditions.checkState(!Symbol.RIGHT_PAREN.getLiterals().equals(literals), "There is an error in the vicinity of the force index syntax."); if (literals.equals(shardingRule.getTableRule(tableName).getLogicIndex())) { int beginPosition = lexerEngine.getCurrentToken().getEndPosition() - literals.length(); sqlStatement.addSQLToken(new IndexToken(beginPosition, lexerEngine.getCurrentToken().getEndPosition() - 1, tableName)); } lexerEngine.nextToken(); } while (lexerEngine.skipIfEqual(Symbol.COMMA)); lexerEngine.accept(Symbol.RIGHT_PAREN); } }