[
https://issues.apache.org/jira/browse/CALCITE-7524?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18081512#comment-18081512
]
Alexis Cubilla commented on CALCITE-7524:
-----------------------------------------
Thank you [~mbudiu] and [~jensen] for the quick merge and the kind words.
Glad I could help.
> JdbcSchema throws exception for DECIMAL columns with precision 0 in JDBC
> metadata
> ---------------------------------------------------------------------------------
>
> Key: CALCITE-7524
> URL: https://issues.apache.org/jira/browse/CALCITE-7524
> Project: Calcite
> Issue Type: Bug
> Components: jdbc-adapter, jdbc-driver
> Affects Versions: 1.41.0
> Environment: Apache Calcite 1.41.0 or later (SqlTypeFactoryImpl
> rejects DECIMAL precision 0).
> PostgreSQL with columns defined as NUMERIC or DECIMAL without explicit
> precision in DDL.
> PostgreSQL JDBC driver (for example 42.x).
> Reproduction path: JdbcSchema reads column metadata where COLUMN_SIZE is 0
> for DECIMAL/NUMERIC.
> Reporter: Alexis Cubilla
> Assignee: Alexis Cubilla
> Priority: Major
> Labels: jdbc, metadata, postgresql, pull-request-available
> Fix For: 1.42.0
>
>
> Problem
> -------
> When using JdbcSchema with PostgreSQL (and other JDBC drivers), NUMERIC or
> DECIMAL columns declared without explicit precision in DDL often report
> COLUMN_SIZE = 0 in DatabaseMetaData.
> JdbcSchema.sqlType() passes that value to createSqlType(DECIMAL, 0, scale).
> SqlTypeFactoryImpl then rejects precision 0 with an error such as:
> DECIMAL precision 0 must be between 1 and 19
> The failure occurs while building JDBC column types (schema / row type), for
> example when resolving a table that has such columns. It is not necessarily
> caused by invalid end-user SQL.
> Root cause
> ----------
> Some JDBC drivers use column size 0 to mean that numeric precision is not
> specified for unconstrained NUMERIC/DECIMAL. Calcite currently treats 0 as a
> literal DECIMAL precision, which is invalid for the type factory.
> Proposed fix
> ------------
> In JdbcSchema.sqlType(), when the SQL type is DECIMAL and the reported
> precision is 0, replace it with
> typeFactory.getTypeSystem().getDefaultPrecision(DECIMAL) before calling
> createSqlType.
> Tests
> -----
> Add JdbcSchemaSqlTypeTest (or equivalent) covering Types.NUMERIC and
> Types.DECIMAL with precision 0 and a positive scale, exercising the sqlType
> mapping path.
> Related issues
> --------------
> This is not the same as CALCITE-5212. CALCITE-5212 concerns
> PRECISION_NOT_SPECIFIED (-1) and DECIMAL digest / DATATYPE_CACHE behavior.
> This issue is only about literal precision 0 coming from JDBC metadata.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)