This is an automated email from the ASF dual-hosted git repository. bchapuis pushed a commit to branch sonar in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
commit 12e24742887c3365eb8356e9302ad227833e5445 Author: Bertil Chapuis <[email protected]> AuthorDate: Thu Jun 13 20:32:40 2024 +0200 Improve exception handling --- .../database/metadata/DatabaseMetadata.java | 35 ++++++++++++---------- .../storage/postgres/PostgresDataStore.java | 32 ++++++++++++-------- .../tilestore/postgres/PostgresQueryGenerator.java | 15 +++++++--- .../postgres/PostgresQueryGeneratorTest.java | 3 +- 4 files changed, 53 insertions(+), 32 deletions(-) diff --git a/baremaps-core/src/main/java/org/apache/baremaps/database/metadata/DatabaseMetadata.java b/baremaps-core/src/main/java/org/apache/baremaps/database/metadata/DatabaseMetadata.java index 1c0a180c..77bc51b6 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/database/metadata/DatabaseMetadata.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/database/metadata/DatabaseMetadata.java @@ -66,12 +66,15 @@ public class DatabaseMetadata { this.dataSource = dataSource; } - public List<TableMetadata> getTableMetaData() { + public List<TableMetadata> getTableMetaData() throws SQLException { return getTableMetaData(null, null, null, null); } - public List<TableMetadata> getTableMetaData(String catalog, String schema, - String tableNamePattern, String[] types) { + public List<TableMetadata> getTableMetaData( + String catalog, + String schema, + String tableNamePattern, + String[] types) throws SQLException { Map<String, TableResult> descriptions = getTables(catalog, schema, tableNamePattern, types) .stream().collect(Collectors.toMap(TableResult::tableName, Function.identity())); Map<String, List<ColumnResult>> columns = getColumns(catalog, schema, tableNamePattern, null) @@ -86,8 +89,11 @@ public class DatabaseMetadata { .toList(); } - private List<TableResult> getTables(String catalog, String schemaPattern, String tableNamePattern, - String[] types) { + private List<TableResult> getTables( + String catalog, + String schemaPattern, + String tableNamePattern, + String[] types) throws SQLException { var tableDescriptions = new ArrayList<TableResult>(); try (var connection = dataSource.getConnection(); var resultSet = @@ -105,14 +111,15 @@ public class DatabaseMetadata { resultSet.getString(SELF_REFERENCING_COL_NAME), resultSet.getString(REF_GENERATION))); } - } catch (SQLException e) { - throw new RuntimeException(e); } return tableDescriptions; } - private List<ColumnResult> getColumns(String catalog, String schemaPattern, - String tableNamePattern, String columnNamePattern) { + private List<ColumnResult> getColumns( + String catalog, + String schemaPattern, + String tableNamePattern, + String columnNamePattern) throws SQLException { var tableColumns = new ArrayList<ColumnResult>(); try (var connection = dataSource.getConnection(); var resultSet = connection.getMetaData().getColumns(catalog, schemaPattern, @@ -143,14 +150,14 @@ public class DatabaseMetadata { resultSet.getString(IS_AUTOINCREMENT), resultSet.getString(IS_GENERATEDCOLUMN))); } - } catch (SQLException e) { - throw new RuntimeException(e); } return tableColumns; } - private List<PrimaryKeyResult> getPrimaryKeys(String catalog, String schemaPattern, - String table) { + private List<PrimaryKeyResult> getPrimaryKeys( + String catalog, + String schemaPattern, + String table) throws SQLException { var tablePrimaryKeyColumns = new ArrayList<PrimaryKeyResult>(); try (var connection = dataSource.getConnection(); var resultSet = connection.getMetaData().getPrimaryKeys(catalog, schemaPattern, table)) { @@ -163,8 +170,6 @@ public class DatabaseMetadata { resultSet.getShort(KEY_SEQ), resultSet.getString(PK_NAME))); } - } catch (SQLException e) { - throw new RuntimeException(e); } return tablePrimaryKeyColumns; } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataStore.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataStore.java index e767b0d1..58445f92 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataStore.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataStore.java @@ -65,10 +65,14 @@ public class PostgresDataStore implements DataStore { */ @Override public List<String> list() throws DataStoreException { - DatabaseMetadata metadata = new DatabaseMetadata(dataSource); - return metadata.getTableMetaData(null, "public", null, TYPES).stream() - .map(table -> table.table().tableName()) - .toList(); + try { + DatabaseMetadata metadata = new DatabaseMetadata(dataSource); + return metadata.getTableMetaData(null, "public", null, TYPES).stream() + .map(table -> table.table().tableName()) + .toList(); + } catch (SQLException e) { + throw new DataStoreException(e); + } } /** @@ -76,15 +80,19 @@ public class PostgresDataStore implements DataStore { */ @Override public DataTable get(String name) throws DataStoreException { - var databaseMetadata = new DatabaseMetadata(dataSource); - var postgresName = name.replaceAll(REGEX, "_").toLowerCase(); - var tableMetadata = databaseMetadata.getTableMetaData(null, null, postgresName, TYPES) - .stream().findFirst(); - if (tableMetadata.isEmpty()) { - throw new DataStoreException("Table " + name + " does not exist."); + try { + var databaseMetadata = new DatabaseMetadata(dataSource); + var postgresName = name.replaceAll(REGEX, "_").toLowerCase(); + var tableMetadata = databaseMetadata.getTableMetaData(null, null, postgresName, TYPES) + .stream().findFirst(); + if (tableMetadata.isEmpty()) { + throw new DataStoreException("Table " + name + " does not exist."); + } + var schema = createSchema(tableMetadata.get()); + return new PostgresDataTable(dataSource, schema); + } catch (SQLException e) { + throw new DataStoreException(e); } - var schema = createSchema(tableMetadata.get()); - return new PostgresDataTable(dataSource, schema); } /** diff --git a/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGenerator.java b/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGenerator.java index 73f189fb..ae6f1417 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGenerator.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGenerator.java @@ -18,6 +18,7 @@ package org.apache.baremaps.tilestore.postgres; +import java.sql.SQLException; import java.util.List; import java.util.stream.Collectors; import javax.sql.DataSource; @@ -67,8 +68,13 @@ public class PostgresQueryGenerator { * @param columnNamePattern the column name pattern * @param types the types */ - public PostgresQueryGenerator(DataSource dataSource, String catalog, String schemaPattern, - String typeNamePattern, String columnNamePattern, String... types) { + public PostgresQueryGenerator( + DataSource dataSource, + String catalog, + String schemaPattern, + String typeNamePattern, + String columnNamePattern, + String... types) { this.dataSource = dataSource; this.catalog = catalog; this.schemaPattern = schemaPattern; @@ -82,11 +88,12 @@ public class PostgresQueryGenerator { * * @return the queries */ - public List<TilesetQuery> generate() { + public List<TilesetQuery> generate() throws SQLException { return new DatabaseMetadata(dataSource) .getTableMetaData(catalog, schemaPattern, tableNamePattern, types).stream() .filter(table -> table.primaryKeys().size() == 1) - .filter(table -> table.getGeometryColumns().size() == 1).map(this::getLayer).toList(); + .filter(table -> table.getGeometryColumns().size() == 1) + .map(this::getLayer).toList(); } private TilesetQuery getLayer(TableMetadata table) { diff --git a/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGeneratorTest.java b/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGeneratorTest.java index 98affb2b..214c13a6 100644 --- a/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGeneratorTest.java +++ b/baremaps-core/src/test/java/org/apache/baremaps/tilestore/postgres/PostgresQueryGeneratorTest.java @@ -19,6 +19,7 @@ package org.apache.baremaps.tilestore.postgres; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.sql.SQLException; import java.util.List; import javax.sql.DataSource; import org.apache.baremaps.database.postgres.PostgresRepositoryTest; @@ -30,7 +31,7 @@ class PostgresQueryGeneratorTest extends PostgresRepositoryTest { @Test @Tag("integration") - void generate() { + void generate() throws SQLException { DataSource dataSource = dataSource(); List<TilesetQuery> queries = new PostgresQueryGenerator(dataSource, null, "public", null, null, "TABLE").generate();
