private static void changeColumnDefinitionPositions(final Collection<ColumnPositionSegment> changedPositionColumns, final List<ColumnMetaData> columnMetaDataList) { for (ColumnPositionSegment each : changedPositionColumns) { if (each instanceof ColumnFirstPositionSegment) { changeColumnDefinitionPosition((ColumnFirstPositionSegment) each, columnMetaDataList); } else { changeColumnDefinitionPosition((ColumnAfterPositionSegment) each, columnMetaDataList); } } }
public ShardingMetaData(final Map<String, String> dataSourceURLs, final ShardingRule shardingRule, final DatabaseType databaseType, final ShardingExecuteEngine executeEngine, final TableMetaDataConnectionManager connectionManager, final int maxConnectionsSizePerQuery, final boolean isCheckingMetaData) { dataSource = new ShardingDataSourceMetaData(dataSourceURLs, shardingRule, databaseType); table = new ShardingTableMetaData(new TableMetaDataInitializer(dataSource, executeEngine, connectionManager, maxConnectionsSizePerQuery, isCheckingMetaData).load(shardingRule)); } }
/** * 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 void refreshTableMetaData(final AlterTableStatement alterTableStatement) { String logicTableName = alterTableStatement.getTables().getSingleTableName(); TableMetaData newTableMetaData = TableMetaDataFactory.newInstance(alterTableStatement, getMetaData().getTable().get(logicTableName)); Optional<String> newTableName = alterTableStatement.getNewTableName(); if (newTableName.isPresent()) { getMetaData().getTable().put(newTableName.get(), newTableMetaData); getMetaData().getTable().remove(logicTableName); } else { getMetaData().getTable().put(logicTableName, newTableMetaData); } }
private void refreshTableMetaData(final ShardingContext shardingContext, final CreateTableStatement createTableStatement) { shardingContext.getMetaData().getTable().put(createTableStatement.getTables().getSingleTableName(), TableMetaDataFactory.newInstance(createTableStatement)); }
/** * 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 static List<ColumnMetaData> createColumnMetaDataList( final Map<String, ColumnDefinitionSegment> modifiedColumnDefinitions, final boolean dropPrimaryKey, final TableMetaData oldTableMetaData) { List<ColumnMetaData> result = new LinkedList<>(); for (ColumnMetaData each : oldTableMetaData.getColumns().values()) { ColumnMetaData columnMetaData; if (modifiedColumnDefinitions.containsKey(each.getColumnName())) { ColumnDefinitionSegment columnDefinition = modifiedColumnDefinitions.get(each.getColumnName()); columnMetaData = new ColumnMetaData(columnDefinition.getColumnName(), columnDefinition.getDataType(), !dropPrimaryKey && columnDefinition.isPrimaryKey()); } else { columnMetaData = new ColumnMetaData(each.getColumnName(), each.getDataType(), !dropPrimaryKey && each.isPrimaryKey()); } result.add(columnMetaData); } return result; }
/** * New instance of table meta data. * * @param alterTableStatement alter table statement * @param oldTableMetaData old table meta data * @return instance of table meta data */ public static TableMetaData newInstance(final AlterTableStatement alterTableStatement, final TableMetaData oldTableMetaData) { List<ColumnMetaData> result = createColumnMetaDataList(alterTableStatement.getModifiedColumnDefinitions(), alterTableStatement.isDropPrimaryKey(), oldTableMetaData); result.addAll(createColumnMetaDataList(alterTableStatement.getAddedColumnDefinitions(), alterTableStatement.isDropPrimaryKey())); changeColumnDefinitionPositions(alterTableStatement.getChangedPositionColumns(), result); dropColumnDefinitions(alterTableStatement.getDroppedColumnNames(), result); return new TableMetaData(result); }
private static Optional<ColumnMetaData> find(final String columnName, final List<ColumnMetaData> columnMetaDataList) { for (ColumnMetaData each : columnMetaDataList) { if (columnName.equals(each.getColumnName())) { return Optional.of(each); } } return Optional.absent(); }
private static List<ColumnMetaData> createColumnMetaDataList(final Collection<ColumnDefinitionSegment> addedColumnDefinitions, final boolean dropPrimaryKey) { List<ColumnMetaData> result = new LinkedList<>(); for (ColumnDefinitionSegment each : addedColumnDefinitions) { result.add(new ColumnMetaData(each.getColumnName(), each.getDataType(), !dropPrimaryKey && each.isPrimaryKey())); } return result; }
/** * Get all column names via table. * * @param tableName table name * @return column names. */ public Collection<String> getAllColumnNames(final String tableName) { return tables.containsKey(tableName) ? tables.get(tableName).getColumns().keySet() : Collections.<String>emptyList(); } }
/** * New instance of table meta data. * * @param createTableStatement create table statement * @return instance of table meta data */ public static TableMetaData newInstance(final CreateTableStatement createTableStatement) { return new TableMetaData(Lists.transform(createTableStatement.getColumnDefinitions(), new Function<ColumnDefinitionSegment, ColumnMetaData>() { @Override public ColumnMetaData apply(final ColumnDefinitionSegment input) { return new ColumnMetaData(input.getColumnName(), input.getDataType(), input.isPrimaryKey()); } })); }
private static void changeColumnDefinitionPosition(final ColumnAfterPositionSegment columnAfterPositionSegment, final List<ColumnMetaData> columnMetaDataList) { Optional<ColumnMetaData> columnMetaData = find(columnAfterPositionSegment.getColumnName(), columnMetaDataList); Optional<ColumnMetaData> afterColumnMetaData = find(columnAfterPositionSegment.getAfterColumnName(), columnMetaDataList); if (columnMetaData.isPresent() && afterColumnMetaData.isPresent()) { columnMetaDataList.remove(columnMetaData.get()); columnMetaDataList.add(columnMetaDataList.indexOf(afterColumnMetaData.get()) + 1, columnMetaData.get()); } }
private void refreshTableMetaData(final AlterTableStatement alterTableStatement) { String logicTableName = alterTableStatement.getTables().getSingleTableName(); TableMetaData newTableMetaData = TableMetaDataFactory.newInstance(alterTableStatement, getMetaData().getTable().get(logicTableName)); Optional<String> newTableName = alterTableStatement.getNewTableName(); if (newTableName.isPresent()) { getMetaData().getTable().put(newTableName.get(), newTableMetaData); getMetaData().getTable().remove(logicTableName); } else { getMetaData().getTable().put(logicTableName, newTableMetaData); } }
private void refreshTableMetaData(final CreateTableStatement createTableStatement) { getMetaData().getTable().put(createTableStatement.getTables().getSingleTableName(), TableMetaDataFactory.newInstance(createTableStatement)); }
public TableMetaData(final Collection<ColumnMetaData> columnMetaDataList) { columns = new LinkedHashMap<>(columnMetaDataList.size(), 1); for (ColumnMetaData each : columnMetaDataList) { columns.put(each.getColumnName(), each); } } }
@Override public ColumnMetaData apply(final ColumnDefinitionSegment input) { return new ColumnMetaData(input.getColumnName(), input.getDataType(), input.isPrimaryKey()); } }));
private void refreshTableMetaData(final ShardingContext shardingContext, final AlterTableStatement alterTableStatement) { String logicTableName = alterTableStatement.getTables().getSingleTableName(); TableMetaData newTableMetaData = TableMetaDataFactory.newInstance(alterTableStatement, shardingContext.getMetaData().getTable().get(logicTableName)); Optional<String> newTableName = alterTableStatement.getNewTableName(); if (newTableName.isPresent()) { shardingContext.getMetaData().getTable().put(newTableName.get(), newTableMetaData); shardingContext.getMetaData().getTable().remove(logicTableName); } else { shardingContext.getMetaData().getTable().put(logicTableName, newTableMetaData); } }
private void refreshTableMetaData(final CreateTableStatement createTableStatement) { getMetaData().getTable().put(createTableStatement.getTables().getSingleTableName(), TableMetaDataFactory.newInstance(createTableStatement)); }
private static void dropColumnDefinitions(final Collection<String> droppedColumnNames, final List<ColumnMetaData> columnMetaDataList) { List<ColumnMetaData> droppedColumnMetaDataList = new LinkedList<>(); for (ColumnMetaData each : columnMetaDataList) { if (droppedColumnNames.contains(each.getColumnName())) { droppedColumnMetaDataList.add(each); } } columnMetaDataList.removeAll(droppedColumnMetaDataList); } }