DBZ-6824 trim default value for the BIGINT and SMALLINT types when parsing MySQL DDL

This commit is contained in:
Hang Ruan 2023-08-23 11:28:26 +08:00 committed by Chris Cranford
parent e093a7bdd2
commit 99e9a1f880
2 changed files with 70 additions and 1 deletions

View File

@ -62,7 +62,7 @@ public class MySqlDefaultValueConverter implements DefaultValueConverter {
@Immutable
private static final Set<Integer> TRIM_DATA_TYPES = Collect.unmodifiableSet(Types.TINYINT, Types.INTEGER,
Types.DATE, Types.TIMESTAMP, Types.TIMESTAMP_WITH_TIMEZONE, Types.TIME, Types.BOOLEAN, Types.BIT,
Types.NUMERIC, Types.DECIMAL, Types.FLOAT, Types.DOUBLE, Types.REAL);
Types.NUMERIC, Types.DECIMAL, Types.FLOAT, Types.DOUBLE, Types.REAL, Types.BIGINT, Types.SMALLINT);
@Immutable
private static final Set<Integer> NUMBER_DATA_TYPES = Collect.unmodifiableSet(Types.BIT, Types.TINYINT,

View File

@ -12,6 +12,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.sql.Types;
import java.time.Instant;
@ -3188,6 +3189,74 @@ public void parseDefaultValue() {
assertThat(getColumnSchema(table, "my_dateB").defaultValue()).isEqualTo(LocalDateTime.of(9999, 12, 31, 0, 0, 0).toEpochSecond(ZoneOffset.UTC) * 1_000);
}
@FixFor("DBZ-6824")
@Test
public void parseDefaultValueWhichNeedTrim() {
String ddl = " CREATE TABLE default_value_test (" +
"id INTEGER NOT NULL PRIMARY KEY," +
"tiny_c TINYINT DEFAULT ' 0 '," +
"boolean_c BOOLEAN DEFAULT ' 1 '," +
"tiny_un_z_c TINYINT UNSIGNED ZEROFILL DEFAULT ' 2 '," +
"small_c SMALLINT DEFAULT ' 3 '," +
"small_un_c SMALLINT UNSIGNED DEFAULT ' 4 '," +
"small_un_z_c SMALLINT UNSIGNED ZEROFILL DEFAULT ' 5 '," +
"medium_c MEDIUMINT DEFAULT ' 6 '," +
"medium_un_c MEDIUMINT UNSIGNED DEFAULT ' 7 '," +
"medium_un_z_c MEDIUMINT UNSIGNED ZEROFILL DEFAULT ' 8 '," +
"int_c INTEGER DEFAULT ' 9 '," +
"int_un_c INTEGER UNSIGNED DEFAULT ' 10 '," +
"int_un_z_c INTEGER UNSIGNED ZEROFILL DEFAULT ' 11 '," +
"int11_c INT(11) DEFAULT ' 12 '," +
"big_c BIGINT DEFAULT ' 13 '," +
"big_un_c BIGINT UNSIGNED DEFAULT ' 14 '," +
"big_un_z_c BIGINT UNSIGNED ZEROFILL DEFAULT ' 15 '," +
"decimal_c DECIMAL(8, 4) DEFAULT ' 16 '," +
"decimal_un_c DECIMAL(8, 4) UNSIGNED DEFAULT ' 17 '," +
"decimal_un_z_c DECIMAL(8, 4) UNSIGNED ZEROFILL DEFAULT ' 18 '," +
"numeric_c NUMERIC(6, 0) DEFAULT ' 19 '," +
"big_decimal_c DECIMAL(65, 1) DEFAULT ' 20 '," +
"real_c REAL DEFAULT ' 21.0'," +
"float_c FLOAT DEFAULT ' 22.0'," +
"float_un_c FLOAT UNSIGNED DEFAULT ' 23'," +
"float_un_z_c FLOAT UNSIGNED ZEROFILL DEFAULT ' 24'," +
"double_c DOUBLE DEFAULT ' 25'," +
"double_un_c DOUBLE UNSIGNED DEFAULT ' 26'," +
"double_un_z_c DOUBLE UNSIGNED ZEROFILL DEFAULT ' 27'," +
"tiny_un_c TINYINT UNSIGNED DEFAULT ' 28 ');";
parser.parse(ddl, tables);
Table table = tables.forTable(new TableId(null, null, "default_value_test"));
assertThat(table.columnWithName("id").isOptional()).isEqualTo(false);
assertThat(getColumnSchema(table, "tiny_c").defaultValue()).isEqualTo((short) 0);
assertThat(getColumnSchema(table, "boolean_c").defaultValue()).isEqualTo(true);
assertThat(getColumnSchema(table, "tiny_un_z_c").defaultValue()).isEqualTo((short) 2);
assertThat(getColumnSchema(table, "small_c").defaultValue()).isEqualTo((short) 3);
assertThat(getColumnSchema(table, "small_un_c").defaultValue()).isEqualTo(4);
assertThat(getColumnSchema(table, "small_un_z_c").defaultValue()).isEqualTo(5);
assertThat(getColumnSchema(table, "medium_c").defaultValue()).isEqualTo(6);
assertThat(getColumnSchema(table, "medium_un_c").defaultValue()).isEqualTo(7);
assertThat(getColumnSchema(table, "medium_un_z_c").defaultValue()).isEqualTo(8);
assertThat(getColumnSchema(table, "int_c").defaultValue()).isEqualTo(9);
assertThat(getColumnSchema(table, "int_un_c").defaultValue()).isEqualTo(10);
assertThat(getColumnSchema(table, "int_un_z_c").defaultValue()).isEqualTo(11);
assertThat(getColumnSchema(table, "int11_c").defaultValue()).isEqualTo(12);
assertThat(getColumnSchema(table, "big_c").defaultValue()).isEqualTo(13L);
assertThat(getColumnSchema(table, "big_un_c").defaultValue()).isEqualTo(new BigDecimal(14));
assertThat(getColumnSchema(table, "big_un_z_c").defaultValue()).isEqualTo(new BigDecimal(15));
assertThat(getColumnSchema(table, "decimal_c").defaultValue()).isEqualTo(16.0);
assertThat(getColumnSchema(table, "decimal_un_c").defaultValue()).isEqualTo(17.0);
assertThat(getColumnSchema(table, "decimal_un_z_c").defaultValue()).isEqualTo(18.0);
assertThat(getColumnSchema(table, "numeric_c").defaultValue()).isEqualTo(19.0);
assertThat(getColumnSchema(table, "big_decimal_c").defaultValue()).isEqualTo(20.0);
assertThat(getColumnSchema(table, "real_c").defaultValue()).isEqualTo(21.0f);
assertThat(getColumnSchema(table, "float_c").defaultValue()).isEqualTo(22.0f);
assertThat(getColumnSchema(table, "float_un_c").defaultValue()).isEqualTo(23.0f);
assertThat(getColumnSchema(table, "float_un_z_c").defaultValue()).isEqualTo(24.0f);
assertThat(getColumnSchema(table, "double_c").defaultValue()).isEqualTo(25.0);
assertThat(getColumnSchema(table, "double_un_c").defaultValue()).isEqualTo(26.0);
assertThat(getColumnSchema(table, "double_un_z_c").defaultValue()).isEqualTo(27.0);
assertThat(getColumnSchema(table, "tiny_un_c").defaultValue()).isEqualTo((short) 28);
}
@Test
@FixFor("DBZ-860")
public void shouldTreatPrimaryKeyColumnsImplicitlyAsNonNull() {