You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "benwang li (Jira)" <ji...@apache.org> on 2021/02/04 13:45:00 UTC

[jira] [Updated] (ARROW-11495) [RUST] [datafusion] implementation for numerical_coercion is wrong

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

benwang li updated ARROW-11495:
-------------------------------
    Summary: [RUST] [datafusion] implementation for numerical_coercion is wrong  (was: [RUST] implementation for numerical_coercion is wrong)

> [RUST] [datafusion] implementation for numerical_coercion is wrong
> ------------------------------------------------------------------
>
>                 Key: ARROW-11495
>                 URL: https://issues.apache.org/jira/browse/ARROW-11495
>             Project: Apache Arrow
>          Issue Type: Bug
>            Reporter: benwang li
>            Priority: Major
>
> Currently `numerical_coercion` did not take consideration for integer overflow, such as 
>  
>   
> {code:java}
> //代码占位符
> UIn8 + UIn8 should be UInt16, but now it's UInt8
> UInt16 * UInt16 should be UInt64, but now it's UInt16
> {code}
> I'm the member from ClickHouse, maybe we should learn it from ClickHouse
>  
> {code:java}
> //代码占位符 From  https://github.com/ClickHouse/ClickHouse/blob/bd81f43ecb/src/DataTypes/NumberTraits.h
> template <bool is_signed, bool is_floating, size_t size>
>  struct Construct
> { usingType=Error; }
> ;
> template <> struct Construct<false, false, 1> { using Type = UInt8; };
>  template <> struct Construct<false, false, 2> { using Type = UInt16; };
>  template <> struct Construct<false, false, 4> { using Type = UInt32; };
>  template <> struct Construct<false, false, 8> { using Type = UInt64; };
>  template <> struct Construct<false, false, 16> { using Type = UInt256; }; /// TODO: we cannot use our UInt128 here
>  template <> struct Construct<false, false, 32> { using Type = UInt256; };
>  template <> struct Construct<false, true, 1> { using Type = Float32; };
>  template <> struct Construct<false, true, 2> { using Type = Float32; };
>  template <> struct Construct<false, true, 4> { using Type = Float32; };
>  template <> struct Construct<false, true, 8> { using Type = Float64; };
>  template <> struct Construct<true, false, 1> { using Type = Int8; };
>  template <> struct Construct<true, false, 2> { using Type = Int16; };
>  template <> struct Construct<true, false, 4> { using Type = Int32; };
>  template <> struct Construct<true, false, 8> { using Type = Int64; };
>  template <> struct Construct<true, false, 16> { using Type = Int128; };
>  template <> struct Construct<true, false, 32> { using Type = Int256; };
>  template <> struct Construct<true, true, 1> { using Type = Float32; };
>  template <> struct Construct<true, true, 2> { using Type = Float32; };
>  template <> struct Construct<true, true, 4> { using Type = Float32; };
>  template <> struct Construct<true, true, 8> { using Type = Float64; };
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)