This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 083fb596809c6038091e4a28c552932adbd0cf49 Author: glegal <[email protected]> AuthorDate: Mon May 25 16:54:00 2026 +0200 fix(sql): override sql datatype code for timestamp with timezone column --- .../main/org/apache/sis/storage/sql/feature/Column.java | 2 +- .../org/apache/sis/storage/sql/feature/Database.java | 12 ++++++++++++ .../org/apache/sis/storage/sql/postgis/Postgres.java | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Column.java b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Column.java index b475083191..6980238d97 100644 --- a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Column.java +++ b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Column.java @@ -168,8 +168,8 @@ public class Column implements Cloneable { */ Column(final Analyzer analyzer, final ResultSet metadata, final String quote) throws SQLException { label = name = analyzer.getUniqueString(metadata, Reflection.COLUMN_NAME); - type = metadata.getInt(Reflection.DATA_TYPE); typeName = localPart(metadata.getString(Reflection.TYPE_NAME), quote); + type = analyzer.database.getColumnDatatype(metadata, typeName); precision = metadata.getInt(Reflection.COLUMN_SIZE); isNullable = Boolean.TRUE.equals(SQLUtilities.parseBoolean(metadata.getString(Reflection.IS_NULLABLE))); propertyName = label; diff --git a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java index f803411ac6..264c201505 100644 --- a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java +++ b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java @@ -767,6 +767,18 @@ public class Database<G> extends Syntax { protected JDBCType getArrayComponentType(final Column columnDefinition) { return JDBCType.OTHER; } + + /** + * Return the type of the column. + * + * @param metadata the result of {@code DatabaseMetaData.getColumns(…)}. + * @param typeName name of the sql type. + * @return A java.sql.Types constant. + * @throws SQLException + */ + protected int getColumnDatatype(final ResultSet metadata, String typeName) throws SQLException { + return metadata.getInt(Reflection.DATA_TYPE); + } /** * Returns an identifier of the way binary data are encoded by the <abbr>JDBC</abbr> driver. diff --git a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/Postgres.java b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/Postgres.java index 5c17f86caf..c456a8d407 100644 --- a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/Postgres.java +++ b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/Postgres.java @@ -149,6 +149,22 @@ public final class Postgres<G> extends Database<G> { return super.getArrayComponentType(columnDefinition); } + /** + * Return the type of the column. + * + * @param metadata the result of {@code DatabaseMetaData.getColumns(…)}. + * @param typeName name of the sql type. + * @return A java.sql.Types constant. + * @throws SQLException + */ + @Override + protected int getColumnDatatype(ResultSet metadata, String typeName) throws SQLException { + if ("timestamptz".equalsIgnoreCase(typeName)) { + return Types.TIMESTAMP_WITH_TIMEZONE; + } + return super.getColumnDatatype(metadata, typeName); + } + /** * Returns the mapping for {@link Object} or unrecognized types. */
