From 84f8bfb070df6a06c0749a385184a0393f906c9a Mon Sep 17 00:00:00 2001 From: Jiri Pechanec Date: Wed, 27 Jun 2018 09:14:59 +0200 Subject: [PATCH] DBZ-767 Column should not be renamed when name is not changed --- .../listener/AlterTableParserListener.java | 4 ++- .../connector/mysql/MySqlDdlParserTest.java | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/antlr/listener/AlterTableParserListener.java b/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/antlr/listener/AlterTableParserListener.java index 344a0aed7..881bff6b8 100644 --- a/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/antlr/listener/AlterTableParserListener.java +++ b/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/antlr/listener/AlterTableParserListener.java @@ -161,7 +161,9 @@ public void exitAlterByChangeColumn(MySqlParser.AlterByChangeColumnContext ctx) Column column = columnDefinitionListener.getColumn(); tableEditor.addColumn(column); String newColumnName = parser.parseName(ctx.newColumn); - tableEditor.renameColumn(column.name(), newColumnName); + if (newColumnName != null && !column.name().equals(newColumnName)) { + tableEditor.renameColumn(column.name(), newColumnName); + } if (ctx.FIRST() != null) { tableEditor.reorderColumn(newColumnName, null); diff --git a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlDdlParserTest.java b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlDdlParserTest.java index 87c540dcf..0cac3f11e 100644 --- a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlDdlParserTest.java +++ b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlDdlParserTest.java @@ -1514,6 +1514,31 @@ public void parsePartitionWithEngine() { 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 public void parseDefaultValue() { String ddl = "CREATE TABLE tmp (id INT NOT NULL, " +