Commit a5c82539 authored by terrymanu's avatar terrymanu
Browse files

refactor ColumnPositionSegment

parent 247909b8
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -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);
    }
+3 −7
Original line number Diff line number Diff line
@@ -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;

@@ -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);
            }
@@ -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) {
+12 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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;
    }
}
+5 −4
Original line number Diff line number Diff line
@@ -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.
@@ -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;
    
+6 −3
Original line number Diff line number Diff line
@@ -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;

@@ -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;
        }
@@ -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