You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "Neal Richardson (Jira)" <ji...@apache.org> on 2022/09/04 19:36:00 UTC

[jira] [Updated] (ARROW-17601) [C++] Error when creating Expression on Decimal128 types: precision out of range

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

Neal Richardson updated ARROW-17601:
------------------------------------
    Description: 
Reproducer in R:

{code}
library(arrow)
library(dplyr)

tab <- Table$create(col1 = 1:4, col2 = 5:8)
tab <- tab$cast(schema(col1 = decimal128(33, 4), col2 = decimal128(15, 2)))
tab %>% mutate(col1 * col2)

# Error: Invalid: Decimal precision out of range [1, 38]: 49
# /Users/me/arrow/cpp/src/arrow/compute/kernels/scalar_arithmetic.cc:1078  DecimalType::Make(left_type.id(), precision, scale)
# /Users/me/arrow/cpp/src/arrow/compute/exec/expression.cc:413  call.kernel->signature->out_type().Resolve(&kernel_context, types)
{code}

We don't have this problem integers and floats, we upcast to a wider size in some compute functions like multiplication. Should this go up to Decimal256? Or is there a better way to determine the size required?

  was:
Reproducer in R:

{code}
library(arrow)
library(dplyr)

tab <- Table$create(col1 = 1:4, col2 = 5:8)
tab <- tab$cast(schema(col1 = decimal128(33, 4), col2 = decimal128(15, 2)))
tab %>% mutate(col1 * col2)

# Error: Invalid: Decimal precision out of range [1, 38]: 49
# /Users/me/arrow/cpp/src/arrow/compute/kernels/scalar_arithmetic.cc:1078  DecimalType::Make(left_type.id(), precision, scale)
# /Users/me/arrow/cpp/src/arrow/compute/exec/expression.cc:413  call.kernel->signature->out_type().Resolve(&kernel_context, types)
{code}

With integers and floats, we upcast to a wider size in some compute functions like multiplication. Should this go up to Decimal256? Or is there a better way to determine the size required?


> [C++] Error when creating Expression on Decimal128 types: precision out of range
> --------------------------------------------------------------------------------
>
>                 Key: ARROW-17601
>                 URL: https://issues.apache.org/jira/browse/ARROW-17601
>             Project: Apache Arrow
>          Issue Type: Bug
>          Components: C++
>            Reporter: Neal Richardson
>            Priority: Major
>
> Reproducer in R:
> {code}
> library(arrow)
> library(dplyr)
> tab <- Table$create(col1 = 1:4, col2 = 5:8)
> tab <- tab$cast(schema(col1 = decimal128(33, 4), col2 = decimal128(15, 2)))
> tab %>% mutate(col1 * col2)
> # Error: Invalid: Decimal precision out of range [1, 38]: 49
> # /Users/me/arrow/cpp/src/arrow/compute/kernels/scalar_arithmetic.cc:1078  DecimalType::Make(left_type.id(), precision, scale)
> # /Users/me/arrow/cpp/src/arrow/compute/exec/expression.cc:413  call.kernel->signature->out_type().Resolve(&kernel_context, types)
> {code}
> We don't have this problem integers and floats, we upcast to a wider size in some compute functions like multiplication. Should this go up to Decimal256? Or is there a better way to determine the size required?



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