@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()); } } }
/** * 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); }