/** * Add to the supplied {@link SchemaBuilder} a field for the column with the given information. * * @param builder the schema builder; never null * @param column the column definition * @param mapper the mapping function for the column; may be null if the columns is not to be mapped to different values */ protected void addField(SchemaBuilder builder, Column column, ColumnMapper mapper) { SchemaBuilder fieldBuilder = valueConverterProvider.schemaBuilder(column); if (fieldBuilder != null) { if (mapper != null) { // Let the mapper add properties to the schema ... mapper.alterFieldSchema(column, fieldBuilder); } if (column.isOptional()) fieldBuilder.optional(); // if the default value is provided if (column.hasDefaultValue()) { fieldBuilder.defaultValue(column.defaultValue()); } builder.field(column.name(), fieldBuilder.build()); if (LOGGER.isDebugEnabled()) { LOGGER.debug("- field '{}' ({}{}) from column {}", column.name(), builder.isOptional() ? "OPTIONAL " : "", fieldBuilder.type(), column); } } else { LOGGER.warn("Unexpected JDBC type '{}' for column '{}' that will be ignored", column.jdbcType(), column.name()); } }
@Override public boolean equals(Object obj) { if (obj == this) return true; if (obj instanceof Column) { Column that = (Column) obj; return this.name().equalsIgnoreCase(that.name()) && this.typeExpression().equalsIgnoreCase(that.typeExpression()) && this.typeName().equalsIgnoreCase(that.typeName()) && this.jdbcType() == that.jdbcType() && Strings.equalsIgnoreCase(this.charsetName(),that.charsetName()) && this.position() == that.position() && this.length() == that.length() && this.scale().equals(that.scale()) && this.isOptional() == that.isOptional() && this.isAutoIncremented() == that.isAutoIncremented() && this.isGenerated() == that.isGenerated() && Objects.equals(this.defaultValue(), that.defaultValue()) && this.hasDefaultValue() == that.hasDefaultValue(); } return false; }
@Test @FixFor("DBZ-870") public void shouldAcceptZeroAsDefaultValueForDateColumn() { String ddl = "CREATE TABLE data(id INT, nullable_date date default 0, not_nullable_date date not null default 0, PRIMARY KEY (id))"; parser.parse(ddl, tables); Table table = tables.forTable(new TableId(null, null, "data")); assertThat(table.columnWithName("nullable_date").hasDefaultValue()).isTrue(); // zero date should be mapped to null for nullable column assertThat(table.columnWithName("nullable_date").defaultValue()).isNull(); assertThat(table.columnWithName("not_nullable_date").hasDefaultValue()).isTrue(); // zero date should be mapped to epoch for non-nullable column (expecting Date, as this test is using "connect" // mode) assertThat(table.columnWithName("not_nullable_date").defaultValue()).isEqualTo(getEpochDate()); }
@Test @FixFor("DBZ-860") public void shouldTreatPrimaryKeyColumnsImplicitlyAsNonNull() { String ddl = "CREATE TABLE data(id INT, PRIMARY KEY (id))" + "CREATE TABLE datadef(id INT DEFAULT 0, PRIMARY KEY (id))"; parser.parse(ddl, tables); Table table = tables.forTable(new TableId(null, null, "data")); assertThat(table.columnWithName("id").isOptional()).isEqualTo(false); assertThat(table.columnWithName("id").hasDefaultValue()).isEqualTo(false); Table tableDef = tables.forTable(new TableId(null, null, "datadef")); assertThat(tableDef.columnWithName("id").isOptional()).isEqualTo(false); assertThat(tableDef.columnWithName("id").hasDefaultValue()).isEqualTo(true); assertThat(tableDef.columnWithName("id").defaultValue()).isEqualTo(0); ddl = "CREATE TABLE data(id INT DEFAULT 1, PRIMARY KEY (id))"; parser.parse(ddl, tables); table = tables.forTable(new TableId(null, null, "data")); assertThat(table.columnWithName("id").isOptional()).isEqualTo(false); assertThat(table.columnWithName("id").hasDefaultValue()).isEqualTo(true); assertThat(table.columnWithName("id").defaultValue()).isEqualTo(1); }
@Test public void parseUnsignedBigIntDefaultValueToBigDecimal() { final MySqlValueConverters converters = new MySqlValueConverters(JdbcValueConverters.DecimalMode.DOUBLE, TemporalPrecisionMode.CONNECT, JdbcValueConverters.BigIntUnsignedMode.PRECISE); final AbstractDdlParser parser = parserProducer.apply(converters); String sql = "CREATE TABLE UNSIGNED_BIGINT_TABLE (\n" + " A BIGINT UNSIGNED NULL DEFAULT 0,\n" + " B BIGINT UNSIGNED NULL DEFAULT '10',\n" + " C BIGINT UNSIGNED NULL,\n" + " D BIGINT UNSIGNED NOT NULL,\n" + " E BIGINT UNSIGNED NOT NULL DEFAULT 0,\n" + " F BIGINT UNSIGNED NOT NULL DEFAULT '0',\n" + " G BIGINT UNSIGNED NOT NULL DEFAULT '18446744073709551615'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_BIGINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(BigDecimal.ZERO); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(new BigDecimal(10)); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(BigDecimal.ZERO); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(BigDecimal.ZERO); assertThat(table.columnWithName("G").defaultValue()).isEqualTo(new BigDecimal("18446744073709551615")); }
@Test public void parseUnsignedBigIntDefaultValueToLong() { String sql = "CREATE TABLE UNSIGNED_BIGINT_TABLE (\n" + " A BIGINT UNSIGNED NULL DEFAULT 0,\n" + " B BIGINT UNSIGNED NULL DEFAULT '10',\n" + " C BIGINT UNSIGNED NULL,\n" + " D BIGINT UNSIGNED NOT NULL,\n" + " E BIGINT UNSIGNED NOT NULL DEFAULT 0,\n" + " F BIGINT UNSIGNED NOT NULL DEFAULT '0'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_BIGINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(10L); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(0L); }
@Test public void parseUnsignedIntDefaultValue() { String sql = "CREATE TABLE UNSIGNED_INT_TABLE (\n" + " A INT UNSIGNED NULL DEFAULT 0,\n" + " B INT UNSIGNED NULL DEFAULT '10',\n" + " C INT UNSIGNED NULL,\n" + " D INT UNSIGNED NOT NULL,\n" + " E INT UNSIGNED NOT NULL DEFAULT 0,\n" + " F INT UNSIGNED NOT NULL DEFAULT '0',\n" + " G INT UNSIGNED NOT NULL DEFAULT '4294967295'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_INT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(10L); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("G").defaultValue()).isEqualTo(4294967295L); }
@Test public void parseUnsignedSmallintDefaultValue() { String sql = "CREATE TABLE UNSIGNED_SMALLINT_TABLE (\n" + " A SMALLINT UNSIGNED NULL DEFAULT 0,\n" + " B SMALLINT UNSIGNED NULL DEFAULT '10',\n" + " C SMALLINT UNSIGNED NULL,\n" + " D SMALLINT UNSIGNED NOT NULL,\n" + " E SMALLINT UNSIGNED NOT NULL DEFAULT 0,\n" + " F SMALLINT UNSIGNED NOT NULL DEFAULT '0',\n" + " G SMALLINT UNSIGNED NOT NULL DEFAULT '65535'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_SMALLINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(10); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("G").defaultValue()).isEqualTo(65535); }
@Test public void parseUnsignedMediumintDefaultValue() { String sql = "CREATE TABLE UNSIGNED_MEDIUMINT_TABLE (\n" + " A MEDIUMINT UNSIGNED NULL DEFAULT 0,\n" + " B MEDIUMINT UNSIGNED NULL DEFAULT '10',\n" + " C MEDIUMINT UNSIGNED NULL,\n" + " D MEDIUMINT UNSIGNED NOT NULL,\n" + " E MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,\n" + " F MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',\n" + " G MEDIUMINT UNSIGNED NOT NULL DEFAULT '16777215'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_MEDIUMINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(10); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("G").defaultValue()).isEqualTo(16777215); }
@Test public void parseUnsignedTinyintDefaultValue() { String sql = "CREATE TABLE UNSIGNED_TINYINT_TABLE (" + " A TINYINT UNSIGNED NULL DEFAULT 0," + " B TINYINT UNSIGNED NULL DEFAULT '10'," + " C TINYINT UNSIGNED NULL," + " D TINYINT UNSIGNED NOT NULL," + " E TINYINT UNSIGNED NOT NULL DEFAULT 0," + " F TINYINT UNSIGNED NOT NULL DEFAULT '0'," + " G TINYINT UNSIGNED NOT NULL DEFAULT '255'" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_TINYINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo((short) 0); assertThat(table.columnWithName("B").defaultValue()).isEqualTo((short) 10); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("C").defaultValue()).isNull(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo((short) 0); assertThat(table.columnWithName("F").defaultValue()).isEqualTo((short) 0); assertThat(table.columnWithName("G").defaultValue()).isEqualTo((short) 255); }
/** * Add to the supplied {@link SchemaBuilder} a field for the column with the given information. * * @param builder the schema builder; never null * @param column the column definition * @param mapper the mapping function for the column; may be null if the columns is not to be mapped to different values */ protected void addField(SchemaBuilder builder, Column column, ColumnMapper mapper) { SchemaBuilder fieldBuilder = valueConverterProvider.schemaBuilder(column); if (fieldBuilder != null) { if (mapper != null) { // Let the mapper add properties to the schema ... mapper.alterFieldSchema(column, fieldBuilder); } if (column.isOptional()) fieldBuilder.optional(); // if the default value is provided if (column.hasDefaultValue()) { fieldBuilder.defaultValue(column.defaultValue()); } builder.field(column.name(), fieldBuilder.build()); if (LOGGER.isDebugEnabled()) { LOGGER.debug("- field '{}' ({}{}) from column {}", column.name(), builder.isOptional() ? "OPTIONAL " : "", fieldBuilder.type(), column); } } else { LOGGER.warn("Unexpected JDBC type '{}' for column '{}' that will be ignored", column.jdbcType(), column.name()); } }
@Override public boolean equals(Object obj) { if (obj == this) return true; if (obj instanceof Column) { Column that = (Column) obj; return this.name().equalsIgnoreCase(that.name()) && this.typeExpression().equalsIgnoreCase(that.typeExpression()) && this.typeName().equalsIgnoreCase(that.typeName()) && this.jdbcType() == that.jdbcType() && Strings.equalsIgnoreCase(this.charsetName(),that.charsetName()) && this.position() == that.position() && this.length() == that.length() && this.scale().equals(that.scale()) && this.isOptional() == that.isOptional() && this.isAutoIncremented() == that.isAutoIncremented() && this.isGenerated() == that.isGenerated() && Objects.equals(this.defaultValue(), that.defaultValue()) && this.hasDefaultValue() == that.hasDefaultValue(); } return false; }
@Test @FixFor("DBZ-870") public void shouldAcceptZeroAsDefaultValueForDateColumn() { String ddl = "CREATE TABLE data(id INT, nullable_date date default 0, not_nullable_date date not null default 0, PRIMARY KEY (id))"; parser.parse(ddl, tables); Table table = tables.forTable(new TableId(null, null, "data")); assertThat(table.columnWithName("nullable_date").hasDefaultValue()).isTrue(); // zero date should be mapped to null for nullable column assertThat(table.columnWithName("nullable_date").defaultValue()).isNull(); assertThat(table.columnWithName("not_nullable_date").hasDefaultValue()).isTrue(); // zero date should be mapped to epoch for non-nullable column (expecting Date, as this test is using "connect" // mode) assertThat(table.columnWithName("not_nullable_date").defaultValue()).isEqualTo(getEpochDate()); }
@Test @FixFor("DBZ-860") public void shouldTreatPrimaryKeyColumnsImplicitlyAsNonNull() { String ddl = "CREATE TABLE data(id INT, PRIMARY KEY (id))" + "CREATE TABLE datadef(id INT DEFAULT 0, PRIMARY KEY (id))"; parser.parse(ddl, tables); Table table = tables.forTable(new TableId(null, null, "data")); assertThat(table.columnWithName("id").isOptional()).isEqualTo(false); assertThat(table.columnWithName("id").hasDefaultValue()).isEqualTo(false); Table tableDef = tables.forTable(new TableId(null, null, "datadef")); assertThat(tableDef.columnWithName("id").isOptional()).isEqualTo(false); assertThat(tableDef.columnWithName("id").hasDefaultValue()).isEqualTo(true); assertThat(tableDef.columnWithName("id").defaultValue()).isEqualTo(0); ddl = "CREATE TABLE data(id INT DEFAULT 1, PRIMARY KEY (id))"; parser.parse(ddl, tables); table = tables.forTable(new TableId(null, null, "data")); assertThat(table.columnWithName("id").isOptional()).isEqualTo(false); assertThat(table.columnWithName("id").hasDefaultValue()).isEqualTo(true); assertThat(table.columnWithName("id").defaultValue()).isEqualTo(1); }
@Test public void parseUnsignedBigIntDefaultValueToBigDecimal() { final MySqlValueConverters converters = new MySqlValueConverters(JdbcValueConverters.DecimalMode.DOUBLE, TemporalPrecisionMode.CONNECT, JdbcValueConverters.BigIntUnsignedMode.PRECISE); final AbstractDdlParser parser = parserProducer.apply(converters); String sql = "CREATE TABLE UNSIGNED_BIGINT_TABLE (\n" + " A BIGINT UNSIGNED NULL DEFAULT 0,\n" + " B BIGINT UNSIGNED NULL DEFAULT '10',\n" + " C BIGINT UNSIGNED NULL,\n" + " D BIGINT UNSIGNED NOT NULL,\n" + " E BIGINT UNSIGNED NOT NULL DEFAULT 0,\n" + " F BIGINT UNSIGNED NOT NULL DEFAULT '0',\n" + " G BIGINT UNSIGNED NOT NULL DEFAULT '18446744073709551615'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_BIGINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(BigDecimal.ZERO); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(new BigDecimal(10)); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(BigDecimal.ZERO); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(BigDecimal.ZERO); assertThat(table.columnWithName("G").defaultValue()).isEqualTo(new BigDecimal("18446744073709551615")); }
@Test public void parseUnsignedBigIntDefaultValueToLong() { String sql = "CREATE TABLE UNSIGNED_BIGINT_TABLE (\n" + " A BIGINT UNSIGNED NULL DEFAULT 0,\n" + " B BIGINT UNSIGNED NULL DEFAULT '10',\n" + " C BIGINT UNSIGNED NULL,\n" + " D BIGINT UNSIGNED NOT NULL,\n" + " E BIGINT UNSIGNED NOT NULL DEFAULT 0,\n" + " F BIGINT UNSIGNED NOT NULL DEFAULT '0'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_BIGINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(10L); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(0L); }
@Test public void parseUnsignedMediumintDefaultValue() { String sql = "CREATE TABLE UNSIGNED_MEDIUMINT_TABLE (\n" + " A MEDIUMINT UNSIGNED NULL DEFAULT 0,\n" + " B MEDIUMINT UNSIGNED NULL DEFAULT '10',\n" + " C MEDIUMINT UNSIGNED NULL,\n" + " D MEDIUMINT UNSIGNED NOT NULL,\n" + " E MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,\n" + " F MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',\n" + " G MEDIUMINT UNSIGNED NOT NULL DEFAULT '16777215'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_MEDIUMINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(10); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("G").defaultValue()).isEqualTo(16777215); }
@Test public void parseUnsignedIntDefaultValue() { String sql = "CREATE TABLE UNSIGNED_INT_TABLE (\n" + " A INT UNSIGNED NULL DEFAULT 0,\n" + " B INT UNSIGNED NULL DEFAULT '10',\n" + " C INT UNSIGNED NULL,\n" + " D INT UNSIGNED NOT NULL,\n" + " E INT UNSIGNED NOT NULL DEFAULT 0,\n" + " F INT UNSIGNED NOT NULL DEFAULT '0',\n" + " G INT UNSIGNED NOT NULL DEFAULT '4294967295'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_INT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(10L); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(0L); assertThat(table.columnWithName("G").defaultValue()).isEqualTo(4294967295L); }
@Test public void parseUnsignedSmallintDefaultValue() { String sql = "CREATE TABLE UNSIGNED_SMALLINT_TABLE (\n" + " A SMALLINT UNSIGNED NULL DEFAULT 0,\n" + " B SMALLINT UNSIGNED NULL DEFAULT '10',\n" + " C SMALLINT UNSIGNED NULL,\n" + " D SMALLINT UNSIGNED NOT NULL,\n" + " E SMALLINT UNSIGNED NOT NULL DEFAULT 0,\n" + " F SMALLINT UNSIGNED NOT NULL DEFAULT '0',\n" + " G SMALLINT UNSIGNED NOT NULL DEFAULT '65535'\n" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_SMALLINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("B").defaultValue()).isEqualTo(10); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("F").defaultValue()).isEqualTo(0); assertThat(table.columnWithName("G").defaultValue()).isEqualTo(65535); }
@Test public void parseUnsignedTinyintDefaultValue() { String sql = "CREATE TABLE UNSIGNED_TINYINT_TABLE (" + " A TINYINT UNSIGNED NULL DEFAULT 0," + " B TINYINT UNSIGNED NULL DEFAULT '10'," + " C TINYINT UNSIGNED NULL," + " D TINYINT UNSIGNED NOT NULL," + " E TINYINT UNSIGNED NOT NULL DEFAULT 0," + " F TINYINT UNSIGNED NOT NULL DEFAULT '0'," + " G TINYINT UNSIGNED NOT NULL DEFAULT '255'" + ");"; parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "UNSIGNED_TINYINT_TABLE")); assertThat(table.columnWithName("A").defaultValue()).isEqualTo((short) 0); assertThat(table.columnWithName("B").defaultValue()).isEqualTo((short) 10); assertThat(table.columnWithName("C").isOptional()).isEqualTo(true); assertThat(table.columnWithName("C").hasDefaultValue()).isTrue(); assertThat(table.columnWithName("C").defaultValue()).isNull(); assertThat(table.columnWithName("D").isOptional()).isEqualTo(false); assertThat(table.columnWithName("D").hasDefaultValue()).isFalse(); assertThat(table.columnWithName("E").isOptional()).isEqualTo(false); assertThat(table.columnWithName("E").defaultValue()).isEqualTo((short) 0); assertThat(table.columnWithName("F").defaultValue()).isEqualTo((short) 0); assertThat(table.columnWithName("G").defaultValue()).isEqualTo((short) 255); }