Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-14170

Loss of digits when doing CAST from varint/bigint to decimal

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Low
    • Resolution: Fixed
    • 3.11.3, 4.0-alpha1, 4.0
    • Legacy/CQL
    • None
    • Tested with Cassandra 3.11.1 but this issue is present since the implementation of cast functions.

    • Low

    Description

      Cast functions from numeric types to decimal type are implemented as conversion to double first and then from double to decimal: https://github.com/apache/cassandra/compare/trunk...blerer:10310-3.0#diff-6aa4a8f76df6c30c5bb4026b8c9251eeR80.

      This can cause loss of digits for big values stored in varint or bigint. It is probably unexpected because decimal can store such values precisely.

      Examples:

      cqlsh> CREATE TABLE cast_bigint_test(k int PRIMARY KEY, bigint_clmn bigint);
      cqlsh> INSERT INTO cast_bigint_test(k, decimal_clmn) VALUES(2, 9223372036854775807);
      cqlsh> SELECT CAST(bigint_clmn AS decimal) FROM cast_bigint_test;
      cast(bigint_clmn as decimal)
      ------------------------------
      9.223372036854776E+18
      (1 rows)

      cqlsh> CREATE TABLE cast_varint_test (k int PRIMARY KEY, varint_clmn varint);
      cqlsh> INSERT INTO cast_varint_test(k, varint_clmn) values(2, 1234567890123456789);
      cqlsh> SELECT CAST(varint_clmn AS decimal) FROM cast_varint_test;
      cast(varint_clmn as decimal)
      ------------------------------
      1.23456789012345677E+18
      (1 rows)

       

      Attachments

        Activity

          People

            blerer Benjamin Lerer
            danfiala Daniel Fiala
            Benjamin Lerer
            Andres de la Peña
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: