Loading sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/extractor/impl/dialect/mysql/definition/column/MySQLColumnPositionExtractor.java +2 −5 Original line number Diff line number Diff line Loading @@ -42,12 +42,9 @@ public final class MySQLColumnPositionExtractor implements OptionalSQLSegmentExt return Optional.absent(); } Optional<ParserRuleContext> columnNameNode = ExtractorUtils.findFirstChildNode(firstOrAfterColumnNode.get(), RuleName.COLUMN_NAME); ColumnPositionSegment result = new ColumnPositionSegment(firstOrAfterColumnNode.get().getStart().getStartIndex()); ColumnPositionSegment result = new ColumnPositionSegment(firstOrAfterColumnNode.get().getStart().getStartIndex(), columnName); if (columnNameNode.isPresent()) { result.setColumnName(columnName); result.setAfterColumn(columnNameNode.get().getText()); } else { result.setFirstColumn(columnName); result.setAfterColumnName(columnNameNode.get().getText()); } return Optional.of(result); } Loading sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/optimizer/impl/ddl/dialect/mysql/MySQLAlterTableOptimizer.java +3 −7 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import io.shardingsphere.core.parsing.antlr.optimizer.impl.ddl.AlterTableOptimiz import io.shardingsphere.core.parsing.antlr.sql.segment.definition.column.ColumnPositionSegment; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.AlterTableStatement; import java.util.Collections; import java.util.Iterator; import java.util.List; Loading @@ -38,12 +37,9 @@ public final class MySQLAlterTableOptimizer extends AlterTableOptimizer { if (alterTableStatement.getPositionChangedColumns().isEmpty()) { return; } if (alterTableStatement.getPositionChangedColumns().size() > 1) { Collections.sort(alterTableStatement.getPositionChangedColumns()); } for (ColumnPositionSegment each : alterTableStatement.getPositionChangedColumns()) { if (null != each.getFirstColumn()) { adjustFirst(newColumnMetaData, each.getFirstColumn()); if (!each.getAfterColumnName().isPresent()) { adjustFirst(newColumnMetaData, each.getColumnName()); } else { adjustAfter(newColumnMetaData, each); } Loading Loading @@ -73,7 +69,7 @@ public final class MySQLAlterTableOptimizer extends AlterTableOptimizer { if (newColumnMetaData.get(i).getColumnName().equals(columnPosition.getColumnName())) { adjustColumnIndex = i; } if (newColumnMetaData.get(i).getColumnName().equals(columnPosition.getAfterColumn())) { if (newColumnMetaData.get(i).getColumnName().equals(columnPosition.getAfterColumnName().get())) { afterIndex = i; } if (adjustColumnIndex >= 0 && afterIndex >= 0) { Loading sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/sql/segment/definition/column/ColumnPositionSegment.java +12 −4 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package io.shardingsphere.core.parsing.antlr.sql.segment.definition.column; import com.google.common.base.Optional; import io.shardingsphere.core.parsing.antlr.sql.segment.SQLSegment; import lombok.Getter; import lombok.RequiredArgsConstructor; Loading @@ -34,14 +35,21 @@ public final class ColumnPositionSegment implements SQLSegment, Comparable<Colum private final int startIndex; private String firstColumn; private final String columnName; private String columnName; private String afterColumnName; private String afterColumn; /** * Get after column name. * * @return after column name */ public Optional<String> getAfterColumnName() { return Optional.fromNullable(afterColumnName); } @Override public int compareTo(final ColumnPositionSegment o) { return null == o ? -1 : startIndex - o.startIndex; return startIndex - o.startIndex; } } sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/sql/statement/ddl/AlterTableStatement.java +5 −4 Original line number Diff line number Diff line Loading @@ -26,10 +26,11 @@ import io.shardingsphere.core.parsing.antlr.sql.segment.definition.column.Column import lombok.Getter; import lombok.Setter; import java.util.Collection; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.TreeSet; /** * Alter table statement. Loading @@ -40,13 +41,13 @@ import java.util.Map; @Setter public final class AlterTableStatement extends DDLStatement { private final List<ColumnDefinitionSegment> addedColumnDefinitions = new LinkedList<>(); private final Collection<ColumnDefinitionSegment> addedColumnDefinitions = new LinkedList<>(); private final Map<String, ColumnDefinitionSegment> modifiedColumnDefinitions = new LinkedHashMap<>(); private final List<String> dropColumnNames = new LinkedList<>(); private final Collection<String> dropColumnNames = new LinkedList<>(); private final List<ColumnPositionSegment> positionChangedColumns = new LinkedList<>(); private final Collection<ColumnPositionSegment> positionChangedColumns = new TreeSet<>(); private boolean dropPrimaryKey; Loading sharding-core/src/test/java/io/shardingsphere/core/parsing/integrate/asserts/table/AlterTableAssert.java +6 −3 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import io.shardingsphere.core.parsing.integrate.jaxb.token.ExpectedUpdateColumnD import lombok.RequiredArgsConstructor; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map.Entry; Loading Loading @@ -92,7 +93,7 @@ public final class AlterTableAssert { assertColumnDefinition(actual.getValue(), expected); } private void assertColumnPositions(final List<ColumnPositionSegment> actual, final List<ExpectedColumnPosition> expected) { private void assertColumnPositions(final Collection<ColumnPositionSegment> actual, final List<ExpectedColumnPosition> expected) { if (null == expected) { return; } Loading @@ -107,8 +108,10 @@ public final class AlterTableAssert { private void assertColumnPosition(final ColumnPositionSegment actual, final ExpectedColumnPosition expected) { assertThat(assertMessage.getFullAssertMessage("Alter column position name assertion error: "), actual.getColumnName(), is(expected.getColumnName())); assertThat(assertMessage.getFullAssertMessage("Alter column [" + actual.getColumnName() + "]position startIndex assertion error: "), actual.getStartIndex(), is(expected.getStartIndex())); assertThat(assertMessage.getFullAssertMessage("Alter column [" + actual.getColumnName() + "]position firstColumn assertion error: "), actual.getFirstColumn(), is(expected.getFirstColumn())); assertThat(assertMessage.getFullAssertMessage("Alter column [" + actual.getColumnName() + "]position afterColumn assertion error: "), actual.getAfterColumn(), is(expected.getAfterColumn())); if (actual.getAfterColumnName().isPresent()) { assertThat(assertMessage.getFullAssertMessage( "Alter column [" + actual.getColumnName() + "]position afterColumnName assertion error: "), actual.getAfterColumnName().get(), is(expected.getAfterColumn())); } } private void assertNewMeta(final TableMetaData actual, final ExpectedTableMetaData expected) { Loading Loading
sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/extractor/impl/dialect/mysql/definition/column/MySQLColumnPositionExtractor.java +2 −5 Original line number Diff line number Diff line Loading @@ -42,12 +42,9 @@ public final class MySQLColumnPositionExtractor implements OptionalSQLSegmentExt return Optional.absent(); } Optional<ParserRuleContext> columnNameNode = ExtractorUtils.findFirstChildNode(firstOrAfterColumnNode.get(), RuleName.COLUMN_NAME); ColumnPositionSegment result = new ColumnPositionSegment(firstOrAfterColumnNode.get().getStart().getStartIndex()); ColumnPositionSegment result = new ColumnPositionSegment(firstOrAfterColumnNode.get().getStart().getStartIndex(), columnName); if (columnNameNode.isPresent()) { result.setColumnName(columnName); result.setAfterColumn(columnNameNode.get().getText()); } else { result.setFirstColumn(columnName); result.setAfterColumnName(columnNameNode.get().getText()); } return Optional.of(result); } Loading
sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/optimizer/impl/ddl/dialect/mysql/MySQLAlterTableOptimizer.java +3 −7 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import io.shardingsphere.core.parsing.antlr.optimizer.impl.ddl.AlterTableOptimiz import io.shardingsphere.core.parsing.antlr.sql.segment.definition.column.ColumnPositionSegment; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.AlterTableStatement; import java.util.Collections; import java.util.Iterator; import java.util.List; Loading @@ -38,12 +37,9 @@ public final class MySQLAlterTableOptimizer extends AlterTableOptimizer { if (alterTableStatement.getPositionChangedColumns().isEmpty()) { return; } if (alterTableStatement.getPositionChangedColumns().size() > 1) { Collections.sort(alterTableStatement.getPositionChangedColumns()); } for (ColumnPositionSegment each : alterTableStatement.getPositionChangedColumns()) { if (null != each.getFirstColumn()) { adjustFirst(newColumnMetaData, each.getFirstColumn()); if (!each.getAfterColumnName().isPresent()) { adjustFirst(newColumnMetaData, each.getColumnName()); } else { adjustAfter(newColumnMetaData, each); } Loading Loading @@ -73,7 +69,7 @@ public final class MySQLAlterTableOptimizer extends AlterTableOptimizer { if (newColumnMetaData.get(i).getColumnName().equals(columnPosition.getColumnName())) { adjustColumnIndex = i; } if (newColumnMetaData.get(i).getColumnName().equals(columnPosition.getAfterColumn())) { if (newColumnMetaData.get(i).getColumnName().equals(columnPosition.getAfterColumnName().get())) { afterIndex = i; } if (adjustColumnIndex >= 0 && afterIndex >= 0) { Loading
sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/sql/segment/definition/column/ColumnPositionSegment.java +12 −4 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package io.shardingsphere.core.parsing.antlr.sql.segment.definition.column; import com.google.common.base.Optional; import io.shardingsphere.core.parsing.antlr.sql.segment.SQLSegment; import lombok.Getter; import lombok.RequiredArgsConstructor; Loading @@ -34,14 +35,21 @@ public final class ColumnPositionSegment implements SQLSegment, Comparable<Colum private final int startIndex; private String firstColumn; private final String columnName; private String columnName; private String afterColumnName; private String afterColumn; /** * Get after column name. * * @return after column name */ public Optional<String> getAfterColumnName() { return Optional.fromNullable(afterColumnName); } @Override public int compareTo(final ColumnPositionSegment o) { return null == o ? -1 : startIndex - o.startIndex; return startIndex - o.startIndex; } }
sharding-core/src/main/java/io/shardingsphere/core/parsing/antlr/sql/statement/ddl/AlterTableStatement.java +5 −4 Original line number Diff line number Diff line Loading @@ -26,10 +26,11 @@ import io.shardingsphere.core.parsing.antlr.sql.segment.definition.column.Column import lombok.Getter; import lombok.Setter; import java.util.Collection; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.TreeSet; /** * Alter table statement. Loading @@ -40,13 +41,13 @@ import java.util.Map; @Setter public final class AlterTableStatement extends DDLStatement { private final List<ColumnDefinitionSegment> addedColumnDefinitions = new LinkedList<>(); private final Collection<ColumnDefinitionSegment> addedColumnDefinitions = new LinkedList<>(); private final Map<String, ColumnDefinitionSegment> modifiedColumnDefinitions = new LinkedHashMap<>(); private final List<String> dropColumnNames = new LinkedList<>(); private final Collection<String> dropColumnNames = new LinkedList<>(); private final List<ColumnPositionSegment> positionChangedColumns = new LinkedList<>(); private final Collection<ColumnPositionSegment> positionChangedColumns = new TreeSet<>(); private boolean dropPrimaryKey; Loading
sharding-core/src/test/java/io/shardingsphere/core/parsing/integrate/asserts/table/AlterTableAssert.java +6 −3 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import io.shardingsphere.core.parsing.integrate.jaxb.token.ExpectedUpdateColumnD import lombok.RequiredArgsConstructor; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map.Entry; Loading Loading @@ -92,7 +93,7 @@ public final class AlterTableAssert { assertColumnDefinition(actual.getValue(), expected); } private void assertColumnPositions(final List<ColumnPositionSegment> actual, final List<ExpectedColumnPosition> expected) { private void assertColumnPositions(final Collection<ColumnPositionSegment> actual, final List<ExpectedColumnPosition> expected) { if (null == expected) { return; } Loading @@ -107,8 +108,10 @@ public final class AlterTableAssert { private void assertColumnPosition(final ColumnPositionSegment actual, final ExpectedColumnPosition expected) { assertThat(assertMessage.getFullAssertMessage("Alter column position name assertion error: "), actual.getColumnName(), is(expected.getColumnName())); assertThat(assertMessage.getFullAssertMessage("Alter column [" + actual.getColumnName() + "]position startIndex assertion error: "), actual.getStartIndex(), is(expected.getStartIndex())); assertThat(assertMessage.getFullAssertMessage("Alter column [" + actual.getColumnName() + "]position firstColumn assertion error: "), actual.getFirstColumn(), is(expected.getFirstColumn())); assertThat(assertMessage.getFullAssertMessage("Alter column [" + actual.getColumnName() + "]position afterColumn assertion error: "), actual.getAfterColumn(), is(expected.getAfterColumn())); if (actual.getAfterColumnName().isPresent()) { assertThat(assertMessage.getFullAssertMessage( "Alter column [" + actual.getColumnName() + "]position afterColumnName assertion error: "), actual.getAfterColumnName().get(), is(expected.getAfterColumn())); } } private void assertNewMeta(final TableMetaData actual, final ExpectedTableMetaData expected) { Loading