[ 
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)

Reply via email to