[
https://issues.apache.org/jira/browse/FLINK-40322?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated FLINK-40322:
-----------------------------------
Labels: pull-request-available (was: )
> PyFlink ArrayType/MultisetType.from_sql_type calls to_sql_type instead
> ----------------------------------------------------------------------
>
> Key: FLINK-40322
> URL: https://issues.apache.org/jira/browse/FLINK-40322
> Project: Flink
> Issue Type: Bug
> Components: API / Python
> Reporter: Nikolaus Schuetz
> Priority: Minor
> Labels: pull-request-available
>
> {{}}
> h2. Summary
> {{PyFlink's
> [ArrayType|https://github.com/apache/flink/blob/release-2.3.0/flink-python/pyflink/table/types.py#L926]}}
> and
> [{{MultisetType}}|https://github.com/apache/flink/blob/release-2.3.0/flink-python/pyflink/table/types.py#L1054]
> mistakenly call {{to_sql_type}} from their {{from_sql_type}} wrappers:
> * *MultisetType:*
> [https://github.com/apache/flink/blob/release-2.3.0/flink-python/pyflink/table/types.py#L1054]
> * *ArrayType:*
> [https://github.com/apache/flink/blob/release-2.3.0/flink-python/pyflink/table/types.py#L926]
> This is a typo from the above wrapping of {{{}to_sql_type{}}}. To be clear,
> {{from_sql_type}} is meant to decode the internal/SQL representation back to
> Python. For an element type that needs conversion (e.g. {{{}DATE{}}}, whose
> internal form is an int day-count), decoding an
> {{{}ARRAY{}}}/{{{}MULTISET{}}} then feeds an {{int}} into
> {{{}DateType.to_sql_type{}}}, which does {{v.toordinal()}} and as expected it
> raises:
> {{AttributeError: 'int' object has no attribute 'toordinal'}}
> The sibling {{MapType.from_sql_type}} (same file) is correct — it calls
> {{from_sql_type}} on both key and value — so
> {{{}ArrayType{}}}/{{{}MultisetType{}}} are simply inconsistent with it.
> h3. Reproduction
> {code:python}
> from pyflink.table.types import DataTypes
> at = DataTypes.ARRAY(DataTypes.DATE())
> at.from_sql_type([0, 1])
> # expected: [datetime.date(1970, 1, 1), datetime.date(1970, 1, 2)]
> # actual: AttributeError: 'int' object has no attribute 'toordinal'
> {code}
> Same for {{{}DataTypes.MULTISET(DataTypes.DATE()){}}}.
> h3. Fix
> Call {{from_sql_type}} on each element, matching
> {{{}MapType.from_sql_type{}}}. Regression tests added for {{ARRAY<DATE>}} and
> {{{}MULTISET<DATE>{}}}.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)