private void fillColumnTableMap(final SQLStatement sqlStatement, final ShardingTableMetaData shardingTableMetaData, final Map<String, String> columnNameToTable, final Map<String, Integer> columnNameCount) { if (null == shardingTableMetaData) { return; } for (String each : sqlStatement.getTables().getTableNames()) { Collection<String> tableColumns = shardingTableMetaData.getAllColumnNames(each); for (String columnName : tableColumns) { columnNameToTable.put(columnName, each); Integer count = columnNameCount.get(columnName); if (null == count) { count = 1; } else { count++; } columnNameCount.put(columnName, count); } } }
private Collection<Column> parseWithoutColumn( final InsertStatement insertStatement, final ShardingTableMetaData shardingTableMetaData, final String tableName, final Optional<Column> generateKeyColumn) { int count = 0; int beginPosition = lexerEngine.getCurrentToken().getEndPosition() - lexerEngine.getCurrentToken().getLiterals().length() - 1; insertStatement.addSQLToken(new InsertColumnToken(beginPosition, "(")); ItemsToken columnsToken = new ItemsToken(beginPosition); columnsToken.setFirstOfItemsSpecial(true); Collection<Column> result = new LinkedList<>(); if (shardingTableMetaData.containsTable(tableName)) { for (String each : shardingTableMetaData.getAllColumnNames(tableName)) { result.add(new Column(each, tableName)); if (generateKeyColumn.isPresent() && generateKeyColumn.get().getName().equalsIgnoreCase(each)) { insertStatement.setGenerateKeyColumnIndex(count); } columnsToken.getItems().add(each); count++; } } insertStatement.addSQLToken(columnsToken); insertStatement.addSQLToken(new InsertColumnToken(beginPosition, ")")); insertStatement.setColumnsListLastIndex(beginPosition); return result; } }
private void createFromMeta(final InsertStatement insertStatement, final InsertSegment sqlSegment, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData) { int count = 0; String tableName = insertStatement.getTables().getSingleTableName(); int startIndex = sqlSegment.getColumnClauseStartIndex(); insertStatement.addSQLToken(new InsertColumnToken(startIndex, "(")); ItemsToken columnsToken = new ItemsToken(startIndex); columnsToken.setFirstOfItemsSpecial(true); if (shardingTableMetaData.containsTable(tableName)) { Optional<Column> generateKeyColumn = shardingRule.findGenerateKeyColumn(insertStatement.getTables().getSingleTableName()); for (String each : shardingTableMetaData.getAllColumnNames(tableName)) { if (generateKeyColumn.isPresent() && generateKeyColumn.get().getName().equalsIgnoreCase(each)) { insertStatement.setGenerateKeyColumnIndex(count); } Column column = new Column(each, tableName); insertStatement.getColumns().add(column); columnsToken.getItems().add(each); count++; } } insertStatement.addSQLToken(columnsToken); insertStatement.addSQLToken(new InsertColumnToken(startIndex, ")")); insertStatement.setColumnsListLastIndex(startIndex); }