Skip to content
Snippets Groups Projects
Commit 7441704b authored by Martin Weise's avatar Martin Weise
Browse files

Merge branch 'hotfix/tinyint-mapping' into 'dev'

Hotfix the mapping problem of unsigned boolean

See merge request !312
parents 87412e52 898d0a62
No related branches found
No related tags found
6 merge requests!322Master,!321Dev,!319Dev,!318Dev,!315Dev,!312Hotfix the mapping problem of unsigned boolean
......@@ -332,12 +332,39 @@ public class SchemaServiceIntegrationTest extends AbstractUnitTest {
assertEquals("other_id", pk1.getColumn().getName());
assertEquals("other_id", pk1.getColumn().getInternalName());
assertEquals(ColumnTypeDto.BIGINT, pk1.getColumn().getColumnType());
}
@Test
public void inspectTable_exoticBoolean_succeeds() throws TableNotFoundException, SQLException {
/* test */
final TableDto response = schemaService.inspectTable(DATABASE_1_PRIVILEGED_DTO, "exotic_boolean");
final ConstraintsDto constraints = response.getConstraints();
final List<PrimaryKeyDto> primaryKey = new LinkedList<>(constraints.getPrimaryKey());
assertEquals(1, primaryKey.size());
final PrimaryKeyDto pk0 = primaryKey.get(0);
assertNull(pk0.getId());
assertNotNull(pk0.getTable());
assertNull(pk0.getTable().getId());
assertEquals("exotic_boolean", pk0.getTable().getName());
assertEquals("exotic_boolean", pk0.getTable().getInternalName());
assertNotNull(pk0.getColumn());
assertNull(pk0.getColumn().getId());
assertNull(pk0.getColumn().getTableId());
assertEquals(DATABASE_1_ID, pk0.getColumn().getDatabaseId());
assertNull(pk0.getColumn().getAlias());
assertEquals("bool_default", pk0.getColumn().getName());
assertEquals("bool_default", pk0.getColumn().getInternalName());
assertEquals(ColumnTypeDto.BOOL, pk0.getColumn().getColumnType());
final List<ColumnDto> columns = response.getColumns();
assertEquals(3, columns.size());
assertColumn(columns.get(0), null, null, DATABASE_1_ID, "bool_default", "bool_default", ColumnTypeDto.BOOL, null, 0L, false, null, null);
assertColumn(columns.get(1), null, null, DATABASE_1_ID, "bool_tinyint", "bool_tinyint", ColumnTypeDto.BOOL, null, 0L, false, null, null);
assertColumn(columns.get(2), null, null, DATABASE_1_ID, "bool_tinyint_unsigned", "bool_tinyint_unsigned", ColumnTypeDto.BOOL, null, 0L, false, null, null);
}
@Test
public void inspectView_succeeds() throws ViewMalformedException, SQLException, ViewNotFoundException,
ViewSchemaException {
public void inspectView_succeeds() throws SQLException, ViewNotFoundException {
/* test */
final ViewDto response = schemaService.inspectView(DATABASE_1_PRIVILEGED_DTO, "not_in_metadata_db2");
......
......@@ -334,7 +334,7 @@ public class TableServiceIntegrationTest extends AbstractUnitTest {
/* test */
final List<TableDto> response = tableService.getSchemas(DATABASE_1_PRIVILEGED_DTO);
assertEquals(3, response.size());
assertEquals(4, response.size());
final TableDto table0 = response.get(0);
Assertions.assertEquals("complex_foreign_keys", table0.getInternalName());
Assertions.assertEquals("complex_foreign_keys", table0.getName());
......@@ -411,32 +411,53 @@ public class TableServiceIntegrationTest extends AbstractUnitTest {
assertEquals(0, constraints1.getUniques().size());
/* table 2 */
final TableDto table2 = response.get(2);
Assertions.assertEquals("not_in_metadata_db", table2.getInternalName());
Assertions.assertEquals("not_in_metadata_db", table2.getName());
Assertions.assertEquals("exotic_boolean", table2.getInternalName());
Assertions.assertEquals("exotic_boolean", table2.getName());
Assertions.assertEquals(DATABASE_1_ID, table2.getTdbid());
assertTrue(table2.getIsVersioned());
Assertions.assertEquals(DATABASE_1_PUBLIC, table2.getIsPublic());
final List<ColumnDto> columns2 = table2.getColumns();
assertNotNull(columns2);
Assertions.assertEquals(5, columns2.size());
assertColumn(columns2.get(0), null, null, DATABASE_1_ID, "id", "id", ColumnTypeDto.BIGINT, 19L, 0L, false, null, null);
assertColumn(columns2.get(1), null, null, DATABASE_1_ID, "given_name", "given_name", ColumnTypeDto.VARCHAR, 255L, null, false, null, null);
assertColumn(columns2.get(2), null, null, DATABASE_1_ID, "middle_name", "middle_name", ColumnTypeDto.VARCHAR, 255L, null, true, null, null);
assertColumn(columns2.get(3), null, null, DATABASE_1_ID, "family_name", "family_name", ColumnTypeDto.VARCHAR, 255L, null, false, null, null);
assertColumn(columns2.get(4), null, null, DATABASE_1_ID, "age", "age", ColumnTypeDto.INT, 10L, 0L, false, null, null);
Assertions.assertEquals(3, columns2.size());
assertColumn(columns2.get(0), null, null, DATABASE_1_ID, "bool_default", "bool_default", ColumnTypeDto.BOOL, null, 0L, false, null, null);
assertColumn(columns2.get(1), null, null, DATABASE_1_ID, "bool_tinyint", "bool_tinyint", ColumnTypeDto.BOOL, null, 0L, false, null, null);
assertColumn(columns2.get(2), null, null, DATABASE_1_ID, "bool_tinyint_unsigned", "bool_tinyint_unsigned", ColumnTypeDto.BOOL, null, 0L, false, null, null);
final ConstraintsDto constraints2 = table2.getConstraints();
assertNotNull(constraints2);
final Set<PrimaryKeyDto> primaryKey2 = constraints2.getPrimaryKey();
Assertions.assertEquals(1, primaryKey2.size());
final Set<String> checks2 = constraints2.getChecks();
Assertions.assertEquals(1, checks2.size());
Assertions.assertEquals(Set.of("`age` > 0 and `age` < 120"), checks2);
Assertions.assertEquals(0, checks2.size());
final List<UniqueDto> uniques2 = constraints2.getUniques();
Assertions.assertEquals(1, uniques2.size());
Assertions.assertEquals(2, uniques2.get(0).getColumns().size());
Assertions.assertEquals("not_in_metadata_db", uniques2.get(0).getTable().getInternalName());
Assertions.assertEquals("given_name", uniques2.get(0).getColumns().get(0).getInternalName());
Assertions.assertEquals("family_name", uniques2.get(0).getColumns().get(1).getInternalName());
Assertions.assertEquals(0, uniques2.size());
/* table 3 */
final TableDto table3 = response.get(3);
Assertions.assertEquals("not_in_metadata_db", table3.getInternalName());
Assertions.assertEquals("not_in_metadata_db", table3.getName());
Assertions.assertEquals(DATABASE_1_ID, table3.getTdbid());
assertTrue(table3.getIsVersioned());
Assertions.assertEquals(DATABASE_1_PUBLIC, table3.getIsPublic());
final List<ColumnDto> columns3 = table3.getColumns();
assertNotNull(columns3);
Assertions.assertEquals(5, columns3.size());
assertColumn(columns3.get(0), null, null, DATABASE_1_ID, "id", "id", ColumnTypeDto.BIGINT, 19L, 0L, false, null, null);
assertColumn(columns3.get(1), null, null, DATABASE_1_ID, "given_name", "given_name", ColumnTypeDto.VARCHAR, 255L, null, false, null, null);
assertColumn(columns3.get(2), null, null, DATABASE_1_ID, "middle_name", "middle_name", ColumnTypeDto.VARCHAR, 255L, null, true, null, null);
assertColumn(columns3.get(3), null, null, DATABASE_1_ID, "family_name", "family_name", ColumnTypeDto.VARCHAR, 255L, null, false, null, null);
assertColumn(columns3.get(4), null, null, DATABASE_1_ID, "age", "age", ColumnTypeDto.INT, 10L, 0L, false, null, null);
final ConstraintsDto constraints3 = table3.getConstraints();
assertNotNull(constraints3);
final Set<PrimaryKeyDto> primaryKey3 = constraints3.getPrimaryKey();
Assertions.assertEquals(1, primaryKey3.size());
final Set<String> checks3 = constraints3.getChecks();
Assertions.assertEquals(1, checks3.size());
Assertions.assertEquals(Set.of("`age` > 0 and `age` < 120"), checks3);
final List<UniqueDto> uniques3 = constraints3.getUniques();
Assertions.assertEquals(1, uniques3.size());
Assertions.assertEquals(2, uniques3.get(0).getColumns().size());
Assertions.assertEquals("not_in_metadata_db", uniques3.get(0).getTable().getInternalName());
Assertions.assertEquals("given_name", uniques3.get(0).getColumns().get(0).getInternalName());
Assertions.assertEquals("family_name", uniques3.get(0).getColumns().get(1).getInternalName());
}
@Test
......
......@@ -42,6 +42,13 @@ CREATE TABLE sensor
`value` DECIMAL
) WITH SYSTEM VERSIONING;
CREATE TABLE exotic_boolean
(
`bool_default` BOOLEAN NOT NULL PRIMARY KEY,
`bool_tinyint` TINYINT(1) NOT NULL,
`bool_tinyint_unsigned` TINYINT(1) UNSIGNED NOT NULL
) WITH SYSTEM VERSIONING;
INSERT INTO weather_location (location, lat, lng)
VALUES ('Albury', -36.0653583, 146.9112214),
('Sydney', -33.847927, 150.6517942),
......
......@@ -97,6 +97,7 @@ public interface DataMapper {
/**
* Map the inspected schema to either an existing view/table and append e.g. column or (if not existing) create a new view/table.
*
* @param database The database.
* @param resultSet The inspected schema.
* @return The database containing the updated view/table.
......@@ -152,31 +153,23 @@ public interface DataMapper {
.databaseId(table.getTdbid())
.description(resultSet.getString(11))
.build();
final String dataType = resultSet.getString(8);
if (column.getColumnType().equals(ColumnTypeDto.ENUM)) {
column.setEnums(Arrays.stream(resultSet.getString(8)
.substring(0, resultSet.getString(8).length() - 1)
column.setEnums(Arrays.stream(dataType.substring(0, resultSet.getString(8).length() - 1)
.replace("enum(", "")
.split(","))
.map(value -> value.replace("'", ""))
.toList());
}
if (column.getColumnType().equals(ColumnTypeDto.SET)) {
column.setSets(Arrays.stream(resultSet.getString(8)
.substring(0, resultSet.getString(8).length() - 1)
column.setSets(Arrays.stream(dataType.substring(0, dataType.length() - 1)
.replace("set(", "")
.split(","))
.map(value -> value.replace("'", ""))
.toList());
}
/* constraints */
if (resultSet.getString(9) != null && resultSet.getString(9).equals("PRI")) {
table.getConstraints().getPrimaryKey().add(PrimaryKeyDto.builder()
.table(tableDtoToTableBriefDto(table))
.column(columnDtoToColumnBriefDto(column))
.build());
}
/* fix boolean and set size for others */
if (resultSet.getString(8).equalsIgnoreCase("tinyint(1)")) {
if (dataType.startsWith("tinyint(1)")) {
column.setColumnType(ColumnTypeDto.BOOL);
} else if (resultSet.getString(5) != null) {
column.setSize(resultSet.getLong(5));
......@@ -196,6 +189,13 @@ public interface DataMapper {
.id(queryConfig.getDefaultTimeFormatId())
.build());
}
/* constraints */
if (resultSet.getString(9) != null && resultSet.getString(9).equals("PRI")) {
table.getConstraints().getPrimaryKey().add(PrimaryKeyDto.builder()
.table(tableDtoToTableBriefDto(table))
.column(columnDtoToColumnBriefDto(column))
.build());
}
table.getColumns()
.add(column);
return table;
......@@ -241,6 +241,7 @@ public interface DataMapper {
/**
* Parse columns from a SQL statement of a known database.
*
* @param database The database.
* @param query The SQL statement.
* @return The list of columns.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment