From d740bf52dd6c8db2bdfdcd7a4cb04a1cb80c6596 Mon Sep 17 00:00:00 2001 From: Jiabao Sun Date: Tue, 5 Dec 2023 23:00:27 +0800 Subject: [PATCH] DBZ-7230 MySQL BIT Type should have a default length 1 --- .../connector/mysql/antlr/MySqlAntlrDdlParser.java | 3 ++- .../connector/mysql/MySqlAntlrDdlParserTest.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/antlr/MySqlAntlrDdlParser.java b/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/antlr/MySqlAntlrDdlParser.java index 5203c75e1..77d06b508 100644 --- a/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/antlr/MySqlAntlrDdlParser.java +++ b/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/antlr/MySqlAntlrDdlParser.java @@ -180,7 +180,8 @@ protected DataTypeResolver initializeDataTypeResolver() { new DataTypeEntry(Types.NUMERIC, MySqlParser.NUMERIC) .setSuffixTokens(MySqlParser.SIGNED, MySqlParser.UNSIGNED, MySqlParser.ZEROFILL) .setDefaultLengthScaleDimension(10, 0), - new DataTypeEntry(Types.BIT, MySqlParser.BIT), + new DataTypeEntry(Types.BIT, MySqlParser.BIT) + .setDefaultLengthDimension(1), new DataTypeEntry(Types.TIME, MySqlParser.TIME), new DataTypeEntry(Types.TIMESTAMP_WITH_TIMEZONE, MySqlParser.TIMESTAMP), new DataTypeEntry(Types.TIMESTAMP, MySqlParser.DATETIME), diff --git a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlAntlrDdlParserTest.java b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlAntlrDdlParserTest.java index ee6d21806..2f989f293 100644 --- a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlAntlrDdlParserTest.java +++ b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlAntlrDdlParserTest.java @@ -3476,6 +3476,19 @@ public void shouldSupportNationalChar() { assertColumn(table, "c", "NATIONAL CHAR", Types.NCHAR, 1, "utf8", true); } + @FixFor("DBZ-7230") + @Test + public void shouldParseCreateTableWithBitDefaultLength() { + String ddl = "CREATE TABLE t ( c1 BIT NULL );"; + parser.parse(ddl, tables); + assertThat(tables.size()).isEqualTo(1); + Table t = tables.forTable(new TableId(null, null, "t")); + assertThat(t).isNotNull(); + assertThat(t.retrieveColumnNames()).containsExactly("c1"); + assertThat(t.primaryKeyColumnNames()).isEmpty(); + assertColumn(t, "c1", "BIT", Types.BIT, 1, -1, true, false, false); + } + private String toIsoString(String timestamp) { return ZonedTimestamp.toIsoString(Timestamp.valueOf(timestamp).toInstant().atZone(ZoneId.systemDefault()), null, null); }