private void fill(final ConstraintDefinitionSegment sqlSegment, final AlterTableStatement alterTableStatement, final ShardingTableMetaData shardingTableMetaData) { for (String each : sqlSegment.getPrimaryKeyColumnNames()) { Optional<ColumnDefinitionSegment> modifiedColumn = alterTableStatement.findColumnDefinition(each, shardingTableMetaData); if (modifiedColumn.isPresent()) { modifiedColumn.get().setPrimaryKey(true); alterTableStatement.getModifiedColumnDefinitions().put(each, modifiedColumn.get()); } } } }
/** * Find column definition. * * @param columnName column name * @param shardingTableMetaData sharding table meta data * @return column definition */ public Optional<ColumnDefinitionSegment> findColumnDefinition(final String columnName, final ShardingTableMetaData shardingTableMetaData) { Optional<ColumnDefinitionSegment> result = findColumnDefinitionFromMetaData(columnName, shardingTableMetaData); return result.isPresent() ? result : findColumnDefinitionFromCurrentAddClause(columnName); }
/** * 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 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); } }
/** * 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(); }
@Override public void fill(final AddColumnDefinitionSegment sqlSegment, final SQLStatement sqlStatement, final String sql, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData) { AlterTableStatement alterTableStatement = (AlterTableStatement) sqlStatement; if (!alterTableStatement.findColumnDefinitionFromMetaData(sqlSegment.getColumnDefinition().getColumnName(), shardingTableMetaData).isPresent()) { alterTableStatement.getAddedColumnDefinitions().add(sqlSegment.getColumnDefinition()); } if (sqlSegment.getColumnPosition().isPresent()) { alterTableStatement.getChangedPositionColumns().add(sqlSegment.getColumnPosition().get()); } } }
@Override public void fill(final ModifyColumnDefinitionSegment sqlSegment, final SQLStatement sqlStatement, final String sql, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData) { AlterTableStatement alterTableStatement = (AlterTableStatement) sqlStatement; Optional<String> oldColumnName = sqlSegment.getOldColumnName(); if (oldColumnName.isPresent()) { Optional<ColumnDefinitionSegment> oldColumnDefinition = alterTableStatement.findColumnDefinition(oldColumnName.get(), shardingTableMetaData); if (!oldColumnDefinition.isPresent()) { return; } oldColumnDefinition.get().setColumnName(sqlSegment.getColumnDefinition().getColumnName()); if (null != sqlSegment.getColumnDefinition().getDataType()) { oldColumnDefinition.get().setDataType(sqlSegment.getColumnDefinition().getDataType()); } alterTableStatement.getModifiedColumnDefinitions().put(oldColumnName.get(), oldColumnDefinition.get()); } else { alterTableStatement.getModifiedColumnDefinitions().put(sqlSegment.getColumnDefinition().getColumnName(), sqlSegment.getColumnDefinition()); } if (sqlSegment.getColumnPosition().isPresent()) { alterTableStatement.getChangedPositionColumns().add(sqlSegment.getColumnPosition().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 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); } }
@Override public void fill(final RenameColumnSegment sqlSegment, final SQLStatement sqlStatement, final String sql, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData) { AlterTableStatement alterTableStatement = (AlterTableStatement) sqlStatement; Optional<ColumnDefinitionSegment> oldColumnDefinition = alterTableStatement.findColumnDefinition(sqlSegment.getOldColumnName(), shardingTableMetaData); if (!oldColumnDefinition.isPresent()) { return; } oldColumnDefinition.get().setColumnName(sqlSegment.getColumnName()); alterTableStatement.getModifiedColumnDefinitions().put(sqlSegment.getOldColumnName(), oldColumnDefinition.get()); } }