Uploaded image for project: 'Apache Arrow'
  1. Apache Arrow
  2. ARROW-1749

[C++] Handle range of Decimal128 values that require 39 digits to be displayed

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.7.1
    • Fix Version/s: 0.8.0
    • Component/s: C++

      Description

      2 ** 127 - 1 and -2 ** 127 both require a 39th digit to be displayed as a decimal string.

      This means we do not have the ability to display decimal values above 10 ** 38 - 1 even though we have the ability to store them.

      For reference, Impala returns NULL when trying to cast 2 ** 127 - 1 to DECIMAL(38, 0).

      A few next steps are in order:

      1. Explicitly test this behavior
      2. Avoid crashing or displaying garbage when we cannot display a number that can be stored
      3. Make a decision about whether we want to eventually support range of values from 10 ** 38 to 2 ** 127 - 1 positive and -2 ** 127 to -10 ** 38 negative. This would require a larger integer type to hold the value just before being converted to a string.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                cpcloud Phillip Cloud
                Reporter:
                cpcloud Phillip Cloud
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: