DBZ-2641 BLOB type has dimension

This commit is contained in:
Jiri Pechanec 2020-10-08 06:16:33 +02:00 committed by Gunnar Morling
parent dd6e10b92b
commit 2270d23adb
4 changed files with 21 additions and 3 deletions

View File

@ -175,11 +175,11 @@ protected DataTypeResolver initializeDataTypeResolver() {
new DataTypeEntry(Types.TIMESTAMP, MySqlParser.DATETIME),
new DataTypeEntry(Types.BINARY, MySqlParser.BINARY),
new DataTypeEntry(Types.VARBINARY, MySqlParser.VARBINARY),
new DataTypeEntry(Types.BLOB, MySqlParser.BLOB),
new DataTypeEntry(Types.INTEGER, MySqlParser.YEAR)));
dataTypeResolverBuilder.registerDataTypes(MySqlParser.SimpleDataTypeContext.class.getCanonicalName(), Arrays.asList(
new DataTypeEntry(Types.DATE, MySqlParser.DATE),
new DataTypeEntry(Types.BLOB, MySqlParser.TINYBLOB),
new DataTypeEntry(Types.BLOB, MySqlParser.BLOB),
new DataTypeEntry(Types.BLOB, MySqlParser.MEDIUMBLOB),
new DataTypeEntry(Types.BLOB, MySqlParser.LONGBLOB),
new DataTypeEntry(Types.BOOLEAN, MySqlParser.BOOL),

View File

@ -62,6 +62,23 @@ public void beforeEach() {
tables = new Tables();
}
@Test
@FixFor("DBZ-2641")
public void shouldProcessDimensionalBlob() {
String ddl = "CREATE TABLE blobtable (id INT PRIMARY KEY, val1 BLOB(16), val2 BLOB);";
parser.parse(ddl, tables);
assertThat(((MySqlAntlrDdlParser) parser).getParsingExceptionsFromWalker().size()).isEqualTo(0);
assertThat(tables.size()).isEqualTo(1);
Table table = tables.forTable(null, null, "blobtable");
assertThat(table.columns()).hasSize(3);
assertThat(table.columnWithName("id")).isNotNull();
assertThat(table.columnWithName("val1")).isNotNull();
assertThat(table.columnWithName("val2")).isNotNull();
assertThat(table.columnWithName("val1").length()).isEqualTo(16);
assertThat(table.columnWithName("val2").length()).isEqualTo(-1);
}
@Test
@FixFor("DBZ-2604")
public void shouldUseDatabaseCharacterSet() {

View File

@ -2088,12 +2088,12 @@ dataType
| typeName=(DECIMAL | DEC | FIXED | NUMERIC | FLOAT | FLOAT4 | FLOAT8)
lengthTwoOptionalDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType
| typeName=(
DATE | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB
DATE | TINYBLOB | MEDIUMBLOB | LONGBLOB
| BOOL | BOOLEAN | SERIAL
) #simpleDataType
| typeName=(
BIT | TIME | TIMESTAMP | DATETIME | BINARY
| VARBINARY | YEAR
| VARBINARY | BLOB | YEAR
)
lengthOneDimension? #dimensionDataType
| typeName=(ENUM | SET)

View File

@ -31,6 +31,7 @@ create table table_with_index (id int, data varchar(50), UNIQUE INDEX `data_UNIQ
create table transactional_table(name varchar(255), class_id int, id int) transactional=1;
create table transactional(name varchar(255), class_id int, id int);
create table add_test(col1 varchar(255), col2 int, col3 int);
create table blob_test(id int, col1 blob(45));
#end
#begin
-- Rename table