From 2086b779b1bd99421f1c470dee1f1ff9c2c4e414 Mon Sep 17 00:00:00 2001 From: Randall Hauch Date: Fri, 17 Mar 2017 14:15:25 -0500 Subject: [PATCH] DBZ-204 Added test case but unable replicate error Added a test case that uses the MySQL DDL parser to parse similar DDL statements to those reported in the issue, but these are properly handled with the current state of the `master` branch. --- .../connector/mysql/MySqlDdlParserTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) 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 573d2e10f..e5c0de801 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 @@ -853,6 +853,36 @@ public void shouldParseStatementForDbz200() { assertThat(t.columnWithName("UNIQUE").position()).isEqualTo(21); } + + @FixFor("DBZ-204") + @Test + public void shouldParseAlterTableThatChangesMultipleColumns() { + String ddl = "CREATE TABLE `s`.`test` (a INT(11) NULL, b INT NULL, c INT NULL, INDEX i1(b));"; + parser.parse(ddl, tables); + assertThat(tables.size()).isEqualTo(1); + Table t = tables.forTable(new TableId(null, "s", "test")); + assertThat(t).isNotNull(); + assertThat(t.columnNames()).containsExactly("a","b","c"); + assertThat(t.primaryKeyColumnNames()).isEmpty(); + assertColumn(t, "a", "INT", Types.INTEGER, 11, -1, true, false, false); + assertColumn(t, "b", "INT", Types.INTEGER, -1, -1, true, false, false); + assertColumn(t, "c", "INT", Types.INTEGER, -1, -1, true, false, false); + + ddl = "ALTER TABLE `s`.`test` CHANGE COLUMN `a` `d` BIGINT(20) NOT NULL AUTO_INCREMENT"; + parser.parse(ddl, tables); + assertThat(tables.size()).isEqualTo(1); + t = tables.forTable(new TableId(null, "s", "test")); + assertThat(t).isNotNull(); + assertThat(t.columnNames()).containsExactly("d","b","c"); + assertThat(t.primaryKeyColumnNames()).isEmpty(); + assertColumn(t, "d", "BIGINT", Types.BIGINT, 20, -1, false, true, true); + assertColumn(t, "b", "INT", Types.INTEGER, -1, -1, true, false, false); + assertColumn(t, "c", "INT", Types.INTEGER, -1, -1, true, false, false); + + ddl = "ALTER TABLE `s`.`test` DROP INDEX i1"; + parser.parse(ddl, tables); + assertThat(tables.size()).isEqualTo(1); + } @Test public void shouldParseTicketMonsterLiquibaseStatements() {