From f5555a894e6b139fa0bdaf9ce303c1f21368d874 Mon Sep 17 00:00:00 2001 From: Nir Levy Date: Tue, 2 May 2023 12:08:46 +0300 Subject: [PATCH] DBZ-6357 Fix parsing of NATIONAL CHAR --- .../connector/mysql/antlr/MySqlAntlrDdlParser.java | 1 + .../connector/mysql/MySqlAntlrDdlParserTest.java | 13 +++++++++++++ 2 files changed, 14 insertions(+) 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 a50ec1fa1..5203c75e1 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 @@ -128,6 +128,7 @@ protected DataTypeResolver initializeDataTypeResolver() { dataTypeResolverBuilder.registerDataTypes(MySqlParser.NationalStringDataTypeContext.class.getCanonicalName(), Arrays.asList( new DataTypeEntry(Types.NVARCHAR, MySqlParser.NATIONAL, MySqlParser.VARCHAR).setSuffixTokens(MySqlParser.BINARY), new DataTypeEntry(Types.NCHAR, MySqlParser.NATIONAL, MySqlParser.CHARACTER).setSuffixTokens(MySqlParser.BINARY), + new DataTypeEntry(Types.NCHAR, MySqlParser.NATIONAL, MySqlParser.CHAR).setSuffixTokens(MySqlParser.BINARY), new DataTypeEntry(Types.NVARCHAR, MySqlParser.NCHAR, MySqlParser.VARCHAR).setSuffixTokens(MySqlParser.BINARY))); dataTypeResolverBuilder.registerDataTypes(MySqlParser.NationalVaryingStringDataTypeContext.class.getCanonicalName(), Arrays.asList( new DataTypeEntry(Types.NVARCHAR, MySqlParser.NATIONAL, MySqlParser.CHAR, MySqlParser.VARYING), 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 999162528..8e08a55ce 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 @@ -3379,6 +3379,19 @@ public void shouldSupportMariaDbCurrentTimestamp() { assertThat(getColumnSchema(table, "bi").defaultValue()).isNull(); } + @Test + @FixFor("DBZ-6357") + public void shouldSupportNationalChar() { + String ddl = "CREATE TABLE ttt(c NATIONAL CHAR)"; + parser.parse(ddl, tables); + + Table table = tables.forTable(new TableId(null, null, "ttt")); + assertThat(table).isNotNull(); + assertThat(table.retrieveColumnNames()).containsExactly("c"); + assertThat(table.primaryKeyColumnNames()).isEmpty(); + assertColumn(table, "c", "NATIONAL CHAR", Types.NCHAR, 1, "utf8", true); + } + private String toIsoString(String timestamp) { return ZonedTimestamp.toIsoString(Timestamp.valueOf(timestamp).toInstant().atZone(ZoneId.systemDefault()), null, null); }