[ 
https://issues.apache.org/jira/browse/FLINK-38850?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

CHANHAE OH updated FLINK-38850:
-------------------------------
    Summary: Support PostgreSQL uuid type  (was: [Connector/JDBC] Support 
PostgreSQL uuid type)

> Support PostgreSQL uuid type
> ----------------------------
>
>                 Key: FLINK-38850
>                 URL: https://issues.apache.org/jira/browse/FLINK-38850
>             Project: Flink
>          Issue Type: Improvement
>          Components: Connectors / JDBC
>    Affects Versions: jdbc-4.0.0
>            Reporter: CHANHAE OH
>            Priority: Minor
>             Fix For: jdbc-4.0.0
>
>
> h2. 1. The Reason for This Change (Motivation)
> Currently, the Flink JDBC Connector for PostgreSQL does not recognize the 
> native uuid data type. When a user attempts to read a table containing a uuid 
> column through the PostgresCatalog, it fails with an 
> UnsupportedOperationException: Doesn't support Postgres type 'uuid' yet.
> The uuid type is a widely used and important data type in PostgreSQL for 
> storing unique identifiers. Adding support for it significantly improves the 
> usability and completeness of the PostgreSQL connector.
> h2. 2. The Solution (Changes)
> This PR introduces support for the PostgreSQL uuid type by making the 
> following changes:
>  # Schema-level Mapping (PostgresTypeMapper.java):
> Mapped the PostgreSQL {{uuid}} type to Flink's {{{}DataTypes.VARCHAR(36){}}}. 
> This is the most appropriate mapping as the standard string representation of 
> a UUID is 36 characters long.
>  # Runtime Data Conversion (AbstractDialectConverter.java):
> Resolved a fundamental {{ClassCastException}} that occurred during runtime. 
> The PostgreSQL JDBC driver returns a {{java.util.UUID}} object for {{uuid}} 
> columns, but the existing converter logic tried to cast it directly to a 
> {{{}java.lang.String{}}}.
> The deserialization logic for {{CHAR}} and {{VARCHAR}} types has been updated 
> from {{(String) val}} to the more robust {{{}val.toString(){}}}. This not 
> only fixes the issue for UUID but also improves the connector's resilience by 
> correctly handling any object that has a valid string representation.
>  # Test Environment Setup (PostgresMetadata.java):
> Added the {{stringtype=unspecified}} option to the test-only JDBC URL in 
> {{{}PostgresMetadata.java{}}}. This change is {*}critical for the 
> verification process{*}. When populating test data, the test framework 
> attempts to insert a Java {{String}} into a {{uuid}} database column. Without 
> this option, the JDBC driver specifies the type as {{{}varchar{}}}, causing a 
> {{PSQLException}} from the PostgreSQL server. With 
> {{{}stringtype=unspecified{}}}, the driver does not specify the type, 
> allowing the server to correctly perform an implicit cast from the string 
> literal to the uuid type. *This change is confined to the test scope and does 
> not affect the main production code.*
> h2. 3. Test Case Description (Verification)
> Comprehensive tests have been added to verify the correctness of this feature 
> and ensure no regressions were introduced:
>  # PostgresCatalogTest.java:
> A new test testUuidDataTypes() was added. It verifies that the 
> PostgresCatalog correctly infers the schema of a table with a uuid column as 
> VARCHAR(36).
> The existing testListTables() test was updated to correctly expect the newly 
> added uuid_table.
>  # PostgresCatalogITCase.java:
> A new end-to-end test testUuidTypes() was added. This test executes a Flink 
> SQL SELECT query on the uuid_table and asserts that the data is read 
> correctly, confirming that the runtime data conversion works as expected.
>  # PostgresDynamicTableSourceITCase.java:
> The existing integration test was modified to include a uuid column. This 
> verifies that the changes work correctly within the dynamic table source 
> framework.
> related PR : https://github.com/apache/flink-connector-jdbc/pull/182



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to