DBZ-7230 MySQL BIT Type should have a default length 1

This commit is contained in:
Jiabao Sun 2023-12-05 23:00:27 +08:00 committed by Jiri Pechanec
parent 5b3102e14a
commit d740bf52dd
2 changed files with 15 additions and 1 deletions

View File

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

View File

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