DBZ-6357 Fix parsing of NATIONAL CHAR

This commit is contained in:
Nir Levy 2023-05-02 12:08:46 +03:00 committed by Chris Cranford
parent 78c446b2d5
commit f5555a894e
2 changed files with 14 additions and 0 deletions

View File

@ -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),

View File

@ -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);
}