/** * Judge contains column from table meta data or not. * * @param tableName table name * @param column column * @return contains column from table meta data or not */ public boolean containsColumn(final String tableName, final String column) { return containsTable(tableName) && tables.get(tableName).getColumns().keySet().contains(column.toLowerCase()); }
private Iterator<MemoryQueryResultRow> init(final List<QueryResult> queryResults) throws SQLException { List<MemoryQueryResultRow> result = new LinkedList<>(); for (QueryResult each : queryResults) { while (each.next()) { MemoryQueryResultRow memoryResultSetRow = new MemoryQueryResultRow(each); String actualTableName = memoryResultSetRow.getCell(1).toString(); Optional<TableRule> tableRule = shardingRule.findTableRuleByActualTable(actualTableName); if (!tableRule.isPresent()) { if (shardingRule.getTableRules().isEmpty() || shardingTableMetaData.containsTable(actualTableName) && tableNames.add(actualTableName)) { result.add(memoryResultSetRow); } } else if (tableNames.add(tableRule.get().getLogicTable())) { memoryResultSetRow.setCell(1, tableRule.get().getLogicTable()); setCellValue(memoryResultSetRow, tableRule.get().getLogicTable(), actualTableName); result.add(memoryResultSetRow); } } } if (!result.isEmpty()) { setCurrentResultSetRow(result.get(0)); } return result.iterator(); }
/** * Find column definition from meta data. * * @param columnName column name * @param shardingTableMetaData sharding table meta data * @return column definition */ public Optional<ColumnDefinitionSegment> findColumnDefinitionFromMetaData(final String columnName, final ShardingTableMetaData shardingTableMetaData) { if (!shardingTableMetaData.containsTable(getTables().getSingleTableName())) { return Optional.absent(); } for (ColumnMetaData each : shardingTableMetaData.get(getTables().getSingleTableName()).getColumns().values()) { if (columnName.equalsIgnoreCase(each.getColumnName())) { return Optional.of(new ColumnDefinitionSegment(columnName, each.getDataType(), each.isPrimaryKey())); } } return Optional.absent(); }
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); }