Uploaded image for project: 'MariaDB ColumnStore'
  1. MariaDB ColumnStore
  2. MCOL-4532

CAST(AS DECIMAL) returns a garbage for large values

    XMLWordPrintable

Details

    Description

      CAST(AS DECIMAL) returns wrong values in many cases:

      DROP TABLE IF EXISTS t1;
      CREATE TABLE t1 (a VARCHAR(64)) ENGINE=ColumnStore;
      DELIMITER $$
      FOR i IN 1..9 DO
        INSERT INTO t1 VALUES (REPEAT(i,37));
        INSERT INTO t1 VALUES (REPEAT(i,38));
        INSERT INTO t1 VALUES (REPEAT(i,39));
      END FOR;
      $$
      DELIMITER ;
      

      SELECT LENGTH(a), a, CAST(a AS DECIMAL(37,1)) FROM t1 ORDER BY LENGTH(a), a;
      

      +-----------+-----------------------------------------+-----------------------------------------+
      | LENGTH(a) | a                                       | CAST(a AS DECIMAL(37,1))                |
      +-----------+-----------------------------------------+-----------------------------------------+
      |        37 | 1111111111111111111111111111111111111   |  999999999999999999999999999999999999.9 |
      |        37 | 2222222222222222222222222222222222222   |  999999999999999999999999999999999999.9 |
      |        37 | 3333333333333333333333333333333333333   |  999999999999999999999999999999999999.9 |
      |        37 | 4444444444444444444444444444444444444   |  999999999999999999999999999999999999.9 |
      |        37 | 5555555555555555555555555555555555555   |  999999999999999999999999999999999999.9 |
      |        37 | 6666666666666666666666666666666666666   |  999999999999999999999999999999999999.9 |
      |        37 | 7777777777777777777777777777777777777   |  999999999999999999999999999999999999.9 |
      |        37 | 8888888888888888888888888888888888888   |  999999999999999999999999999999999999.9 |
      |        37 | 9999999999999999999999999999999999999   |  999999999999999999999999999999999999.9 |
      |        38 | 11111111111111111111111111111111111111  |  999999999999999999999999999999999999.9 |
      |        38 | 22222222222222222222222222222222222222  | -999999999999999999999999999999999999.9 |  <-- BAD
      |        38 | 33333333333333333333333333333333333333  | -694903358760513013004127409843487812.6 |  <-- BAD
      |        38 | 44444444444444444444444444444444444444  |  999999999999999999999999999999999999.9 |
      |        38 | 55555555555555555555555555555555555555  | -999999999999999999999999999999999999.9 |  <-- BAD
      |        38 | 66666666666666666666666666666666666666  | -999999999999999999999999999999999999.9 |  <-- BAD
      |        38 | 77777777777777777777777777777777777777  |  999999999999999999999999999999999999.9 |
      |        38 | 88888888888888888888888888888888888888  | -999999999999999999999999999999999999.9 |  <-- BAD
      |        38 | 99999999999999999999999999999999999999  | -999999999999999999999999999999999999.9 |  <-- BAD
      |        39 | 111111111111111111111111111111111111111 |  999999999999999999999999999999999999.9 |
      |        39 | 222222222222222222222222222222222222222 |  999999999999999999999999999999999999.9 |
      |        39 | 333333333333333333333333333333333333333 |  999999999999999999999999999999999999.9 |
      |        39 | 444444444444444444444444444444444444444 |  999999999999999999999999999999999999.9 |
      |        39 | 555555555555555555555555555555555555555 |  999999999999999999999999999999999999.9 |
      |        39 | 666666666666666666666666666666666666666 |  999999999999999999999999999999999999.9 |
      |        39 | 777777777777777777777777777777777777777 | -999999999999999999999999999999999999.9 |  <-- BAD
      |        39 | 888888888888888888888888888888888888888 |  999999999999999999999999999999999999.9 |
      |        39 | 999999999999999999999999999999999999999 |  999999999999999999999999999999999999.9 |
      +-----------+-----------------------------------------+-----------------------------------------+
      

      SELECT LENGTH(a), a, CAST(a AS DECIMAL(37,2)) FROM t1 ORDER BY LENGTH(a), a;
      

      +-----------+-----------------------------------------+-----------------------------------------+
      | LENGTH(a) | a                                       | CAST(a AS DECIMAL(37,2))                |
      +-----------+-----------------------------------------+-----------------------------------------+
      |        37 | 1111111111111111111111111111111111111   |  99999999999999999999999999999999999.99 |
      |        37 | 2222222222222222222222222222222222222   | -99999999999999999999999999999999999.99 |  <-- BAD
      |        37 | 3333333333333333333333333333333333333   | -69490335876051301300412740984348781.56 |  <-- BAD
      |        37 | 4444444444444444444444444444444444444   |  99999999999999999999999999999999999.99 |
      |        37 | 5555555555555555555555555555555555555   | -99999999999999999999999999999999999.99 |  <-- BAD
      |        37 | 6666666666666666666666666666666666666   | -99999999999999999999999999999999999.99 |  <-- BAD
      |        37 | 7777777777777777777777777777777777777   |  99999999999999999999999999999999999.99 |
      |        37 | 8888888888888888888888888888888888888   | -99999999999999999999999999999999999.99 |  <-- BAD
      |        37 | 9999999999999999999999999999999999999   | -99999999999999999999999999999999999.99 |  <-- BAD
      |        38 | 11111111111111111111111111111111111111  |  99999999999999999999999999999999999.99 |
      |        38 | 22222222222222222222222222222222222222  | -99999999999999999999999999999999999.99 |  <-- BAD
      |        38 | 33333333333333333333333333333333333333  | -99999999999999999999999999999999999.99 |  <-- BAD
      |        38 | 44444444444444444444444444444444444444  |  99999999999999999999999999999999999.99 |
      |        38 | 55555555555555555555555555555555555555  |  99999999999999999999999999999999999.99 |
      |        38 | 66666666666666666666666666666666666666  | -99999999999999999999999999999999999.99 |  <-- BAD
      |        38 | 77777777777777777777777777777777777777  | -99999999999999999999999999999999999.99 |  <-- BAD
      |        38 | 88888888888888888888888888888888888888  |  99999999999999999999999999999999999.99 |
      |        38 | 99999999999999999999999999999999999999  |  99999999999999999999999999999999999.99 |
      |        39 | 111111111111111111111111111111111111111 | -99999999999999999999999999999999999.99 |  <-- BAD
      |        39 | 222222222222222222222222222222222222222 |  99999999999999999999999999999999999.99 |
      |        39 | 333333333333333333333333333333333333333 |  99999999999999999999999999999999999.99 |
      |        39 | 444444444444444444444444444444444444444 | -99999999999999999999999999999999999.99 |  <-- BAD
      |        39 | 555555555555555555555555555555555555555 |  99999999999999999999999999999999999.99 |
      |        39 | 666666666666666666666666666666666666666 |  99999999999999999999999999999999999.99 |
      |        39 | 777777777777777777777777777777777777777 | -99999999999999999999999999999999999.99 |  <-- BAD
      |        39 | 888888888888888888888888888888888888888 |  99999999999999999999999999999999999.99 |
      |        39 | 999999999999999999999999999999999999999 |  99999999999999999999999999999999999.99 |
      +-----------+-----------------------------------------+-----------------------------------------+
      

      SELECT LENGTH(a), a, CAST(a AS DECIMAL(38,0)) FROM t1 ORDER BY LENGTH(a), a;
      

      +-----------+-----------------------------------------+----------------------------------------+
      | LENGTH(a) | a                                       | CAST(a AS DECIMAL(38,0))               |
      +-----------+-----------------------------------------+----------------------------------------+
      |        37 | 1111111111111111111111111111111111111   |  1111111111111111111111111111111111111 |
      |        37 | 2222222222222222222222222222222222222   |  2222222222222222222222222222222222222 |
      |        37 | 3333333333333333333333333333333333333   |  3333333333333333333333333333333333333 |
      |        37 | 4444444444444444444444444444444444444   |  4444444444444444444444444444444444444 |
      |        37 | 5555555555555555555555555555555555555   |  5555555555555555555555555555555555555 |
      |        37 | 6666666666666666666666666666666666666   |  6666666666666666666666666666666666666 |
      |        37 | 7777777777777777777777777777777777777   |  7777777777777777777777777777777777777 |
      |        37 | 8888888888888888888888888888888888888   |  8888888888888888888888888888888888888 |
      |        37 | 9999999999999999999999999999999999999   |  9999999999999999999999999999999999999 |
      |        38 | 11111111111111111111111111111111111111  | 11111111111111111111111111111111111111 |
      |        38 | 22222222222222222222222222222222222222  | 22222222222222222222222222222222222222 |
      |        38 | 33333333333333333333333333333333333333  | 33333333333333333333333333333333333333 |
      |        38 | 44444444444444444444444444444444444444  | 44444444444444444444444444444444444444 |
      |        38 | 55555555555555555555555555555555555555  | 55555555555555555555555555555555555555 |
      |        38 | 66666666666666666666666666666666666666  | 66666666666666666666666666666666666666 |
      |        38 | 77777777777777777777777777777777777777  | 77777777777777777777777777777777777777 |
      |        38 | 88888888888888888888888888888888888888  | 88888888888888888888888888888888888888 |
      |        38 | 99999999999999999999999999999999999999  | 99999999999999999999999999999999999999 |
      |        39 | 111111111111111111111111111111111111111 | 99999999999999999999999999999999999999 |
      |        39 | 222222222222222222222222222222222222222 | 99999999999999999999999999999999999999 |
      |        39 | 333333333333333333333333333333333333333 | 99999999999999999999999999999999999999 |
      |        39 | 444444444444444444444444444444444444444 | 99999999999999999999999999999999999999 |
      |        39 | 555555555555555555555555555555555555555 | 99999999999999999999999999999999999999 |
      |        39 | 666666666666666666666666666666666666666 | 99999999999999999999999999999999999999 |
      |        39 | 777777777777777777777777777777777777777 | 97213043935900850851028562914241354865 |  <-- BAD
      |        39 | 888888888888888888888888888888888888888 | 99999999999999999999999999999999999999 |
      |        39 | 999999999999999999999999999999999999999 | 99999999999999999999999999999999999999 |
      +-----------+-----------------------------------------+----------------------------------------+
      

      SELECT LENGTH(a), a, CAST(a AS DECIMAL(38,1)) FROM t1 ORDER BY LENGTH(a), a;
      

      +-----------+-----------------------------------------+------------------------------------------+
      | LENGTH(a) | a                                       | CAST(a AS DECIMAL(38,1))                 |
      +-----------+-----------------------------------------+------------------------------------------+
      |        37 | 1111111111111111111111111111111111111   |  1111111111111111111111111111111111111.0 |
      |        37 | 2222222222222222222222222222222222222   |  2222222222222222222222222222222222222.0 |
      |        37 | 3333333333333333333333333333333333333   |  3333333333333333333333333333333333333.0 |
      |        37 | 4444444444444444444444444444444444444   |  4444444444444444444444444444444444444.0 |
      |        37 | 5555555555555555555555555555555555555   |  5555555555555555555555555555555555555.0 |
      |        37 | 6666666666666666666666666666666666666   |  6666666666666666666666666666666666666.0 |
      |        37 | 7777777777777777777777777777777777777   |  7777777777777777777777777777777777777.0 |
      |        37 | 8888888888888888888888888888888888888   |  8888888888888888888888888888888888888.0 |
      |        37 | 9999999999999999999999999999999999999   |  9999999999999999999999999999999999999.0 |
      |        38 | 11111111111111111111111111111111111111  |  9999999999999999999999999999999999999.9 |
      |        38 | 22222222222222222222222222222222222222  | -9999999999999999999999999999999999999.9 |  <-- BAD
      |        38 | 33333333333333333333333333333333333333  |  -694903358760513013004127409843487812.6 |  <-- BAD
      |        38 | 44444444444444444444444444444444444444  |  9999999999999999999999999999999999999.9 |
      |        38 | 55555555555555555555555555555555555555  | -9999999999999999999999999999999999999.9 |  <-- BAD
      |        38 | 66666666666666666666666666666666666666  | -1389806717521026026008254819686975625.2 |  <-- BAD
      |        38 | 77777777777777777777777777777777777777  |  9721304393590085085102856291424135485.8 |  <-- BAD
      |        38 | 88888888888888888888888888888888888888  | -9999999999999999999999999999999999999.9 |  <-- BAD
      |        38 | 99999999999999999999999999999999999999  | -2084710076281539039012382229530463437.8 |  <-- BAD
      |        39 | 111111111111111111111111111111111111111 |  9026401034829572072098728881580647674.2 |  <-- BAD
      |        39 | 222222222222222222222222222222222222222 |  9999999999999999999999999999999999999.9 |
      |        39 | 333333333333333333333333333333333333333 |  9999999999999999999999999999999999999.9 |
      |        39 | 444444444444444444444444444444444444444 |  2077367447224441942057454783145769551.2 |  <-- BAD
      |        39 | 555555555555555555555555555555555555555 |  9999999999999999999999999999999999999.9 |
      |        39 | 666666666666666666666666666666666666666 |  9999999999999999999999999999999999999.9 |
      |        39 | 777777777777777777777777777777777777777 | -4871666140380688187983819315289108571.8 |  <-- BAD
      |        39 | 888888888888888888888888888888888888888 |  9999999999999999999999999999999999999.9 |
      |        39 | 999999999999999999999999999999999999999 |  9999999999999999999999999999999999999.9 |
      +-----------+-----------------------------------------+------------------------------------------+
      

      SELECT LENGTH(a), a, CAST(a AS DECIMAL(38,2)) FROM t1 ORDER BY LENGTH(a), a;
      

      +-----------+-----------------------------------------+------------------------------------------+
      | LENGTH(a) | a                                       | CAST(a AS DECIMAL(38,2))                 |
      +-----------+-----------------------------------------+------------------------------------------+
      |        37 | 1111111111111111111111111111111111111   |  999999999999999999999999999999999999.99 |
      |        37 | 2222222222222222222222222222222222222   | -999999999999999999999999999999999999.99 |  <-- BAD
      |        37 | 3333333333333333333333333333333333333   |  -69490335876051301300412740984348781.56 |  <-- BAD
      |        37 | 4444444444444444444444444444444444444   |  999999999999999999999999999999999999.99 |
      |        37 | 5555555555555555555555555555555555555   | -999999999999999999999999999999999999.99 |  <-- BAD
      |        37 | 6666666666666666666666666666666666666   | -138980671752102602600825481968697563.12 |  <-- BAD
      |        37 | 7777777777777777777777777777777777777   |  972130439359008508510285629142413547.88 |  <-- BAD
      |        37 | 8888888888888888888888888888888888888   | -999999999999999999999999999999999999.99 |  <-- BAD
      |        37 | 9999999999999999999999999999999999999   | -208471007628153903901238222953046344.68 |  <-- BAD
      |        38 | 11111111111111111111111111111111111111  |  902640103482957207209872888158064767.32 |  <-- BAD
      |        38 | 22222222222222222222222222222222222222  | -999999999999999999999999999999999999.99 |
      |        38 | 33333333333333333333333333333333333333  | -694903358760513013004127409843487812.60 |  <-- BAD
      |        38 | 44444444444444444444444444444444444444  |  207736744722444194205745478314576954.72 |  <-- BAD
      |        38 | 55555555555555555555555555555555555555  |  999999999999999999999999999999999999.99 |
      |        38 | 66666666666666666666666666666666666666  | -999999999999999999999999999999999999.99 |  <-- BAD
      |        38 | 77777777777777777777777777777777777777  | -487166614038068818798381931528910857.88 |  <-- BAD
      |        38 | 88888888888888888888888888888888888888  |  415473489444888388411490956629153909.44 |  <-- BAD
      |        38 | 99999999999999999999999999999999999999  |  999999999999999999999999999999999999.99 |
      |        39 | 111111111111111111111111111111111111111 | -999999999999999999999999999999999999.99 |  <-- BAD
      |        39 | 222222222222222222222222222222222222222 |  999999999999999999999999999999999999.99 |
      |        39 | 333333333333333333333333333333333333333 |  999999999999999999999999999999999999.99 |
      |        39 | 444444444444444444444444444444444444444 | -999999999999999999999999999999999999.99 |  <-- BAD
      |        39 | 555555555555555555555555555555555555555 |  999999999999999999999999999999999999.99 |
      |        39 | 666666666666666666666666666666666666666 |  999999999999999999999999999999999999.99 |
      |        39 | 777777777777777777777777777777777777777 | -999999999999999999999999999999999999.99 |  <-- BAD
      |        39 | 888888888888888888888888888888888888888 |  999999999999999999999999999999999999.99 |
      |        39 | 999999999999999999999999999999999999999 |  999999999999999999999999999999999999.99 |
      +-----------+-----------------------------------------+------------------------------------------+
      

      Attachments

        Issue Links

          Activity

            People

              bar Alexander Barkov
              bar Alexander Barkov
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.