DBZ-767 Column should not be renamed when name is not changed

This commit is contained in:
Jiri Pechanec 2018-06-27 09:14:59 +02:00
parent b27421ddd0
commit 84f8bfb070
2 changed files with 28 additions and 1 deletions

View File

@ -161,7 +161,9 @@ public void exitAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx)
Column column = columnDefinitionListener.getColumn(); Column column = columnDefinitionListener.getColumn();
tableEditor.addColumn(column); tableEditor.addColumn(column);
String newColumnName = parser.parseName(ctx.newColumn); String newColumnName = parser.parseName(ctx.newColumn);
if (newColumnName != null && !column.name().equals(newColumnName)) {
tableEditor.renameColumn(column.name(), newColumnName); tableEditor.renameColumn(column.name(), newColumnName);
}
if (ctx.FIRST() != null) { if (ctx.FIRST() != null) {
tableEditor.reorderColumn(newColumnName, null); tableEditor.reorderColumn(newColumnName, null);

View File

@ -1514,6 +1514,31 @@ public void parsePartitionWithEngine() {
assertThat(tables.forTable(new TableId(null, null, "flat_view_request_log"))).isNotNull(); assertThat(tables.forTable(new TableId(null, null, "flat_view_request_log"))).isNotNull();
} }
@Test
@FixFor("DBZ-767")
public void shouldParseChangeColumnAndKeepName() {
final String create =
"CREATE TABLE test (" +
" id INT NOT NULL, myvalue ENUM('Foo','Bar','Baz') NOT NULL DEFAULT 'Foo'," +
" PRIMARY KEY (`id`)" +
");";
final String alter =
"ALTER TABLE test " +
" CHANGE myvalue myvalue INT;";
parser.parse(create, tables);
assertThat(tables.size()).isEqualTo(1);
Table table = tables.forTable(new TableId(null, null, "test"));
assertThat(table).isNotNull();
assertThat(table.columns().size()).isEqualTo(2);
parser.parse(alter, tables);
table = tables.forTable(new TableId(null, null, "test"));
assertThat(table.columns().size()).isEqualTo(2);
final Column col = table.columns().get(1);
assertThat(col.name()).isEqualTo("myvalue");
assertThat(col.typeName()).isEqualTo("INT");
}
@Test @Test
public void parseDefaultValue() { public void parseDefaultValue() {
String ddl = "CREATE TABLE tmp (id INT NOT NULL, " + String ddl = "CREATE TABLE tmp (id INT NOT NULL, " +