Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-23032

FLOOR()/CEIL() incorrectly calculate the precision of a DECIMAL(M,D) column.

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 10.1(EOL), 10.2(EOL), 10.3(EOL), 10.4(EOL), 10.5
    • 10.4.16, 10.5.7
    • Data types
    • None

    Description

      MariaDB [test]> create table i1 (a decimal(38,10));
      Query OK, 0 rows affected (0.057 sec)
       
      MariaDB [test]> create table i2 as select floor(a), ceil(a) from i1;
      Query OK, 0 rows affected (0.019 sec)
      Records: 0  Duplicates: 0  Warnings: 0
       
      MariaDB [test]> show create table i2;
      +-------+--------------------------------------------------------------------------------------------------------------------------------------------+
      | Table | Create Table                                                                                                                               |
      +-------+--------------------------------------------------------------------------------------------------------------------------------------------+
      | i2    | CREATE TABLE `i2` (
        `floor(a)` decimal(28,0) DEFAULT NULL,
        `ceil(a)` decimal(28,0) DEFAULT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
      +-------+--------------------------------------------------------------------------------------------------------------------------------------------+
      1 row in set (0.001 sec)
       
      MariaDB [test]> insert into i1 values (9999999999999999999999999999.9999999999), (-9999999999999999999999999999.9999999999);
      Query OK, 2 rows affected (0.002 sec)
      Records: 2  Duplicates: 0  Warnings: 0
       
      MariaDB [test]> create table i3 as select floor(a), ceil(a) from i1;
      ERROR 1264 (22003): Out of range value for column 'ceil(a)' at row 1
      MariaDB [test]> create table i3 as select floor(a) from i1;
      ERROR 1264 (22003): Out of range value for column 'floor(a)' at row 2
      

      For DECIMAL(M,0), i2 should have M=29, instead of M=28 as in the above. This is because M can exceed by 1 for FLOOR/CEIL functions, for example, when we insert the 2 rows into i1, the result of the functions would contain 29 digits, instead of 28.

      Attachments

        Issue Links

          Activity

            tntnatbry Gagan Goel (Inactive) created issue -
            tntnatbry Gagan Goel (Inactive) made changes -
            Field Original Value New Value
            Attachment MDEV-23032.patch [ 52411 ]
            tntnatbry Gagan Goel (Inactive) made changes -
            elenst Elena Stepanova made changes -
            Fix Version/s 10.5 [ 23123 ]
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            Affects Version/s 10.1 [ 16100 ]
            Affects Version/s 10.2 [ 14601 ]
            Affects Version/s 10.3 [ 22126 ]
            Affects Version/s 10.4 [ 22408 ]
            Affects Version/s 10.5 [ 23123 ]
            Affects Version/s 10.5.3 [ 24263 ]
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            bar Alexander Barkov made changes -
            issue.field.resolutiondate 2020-08-04 04:14:27.0 2020-08-04 04:14:27.583
            bar Alexander Barkov made changes -
            Fix Version/s 10.4.14 [ 24305 ]
            Fix Version/s 10.5.5 [ 24423 ]
            Fix Version/s 10.5 [ 23123 ]
            Resolution Fixed [ 1 ]
            Status Open [ 1 ] Closed [ 6 ]
            dbart Daniel Bartholomew made changes -
            Fix Version/s 10.4.15 [ 24507 ]
            Fix Version/s 10.5.6 [ 24508 ]
            Fix Version/s 10.4.14 [ 24305 ]
            Fix Version/s 10.5.5 [ 24423 ]
            ralf.gebhardt Ralf Gebhardt made changes -
            Fix Version/s 10.5.7 [ 25019 ]
            ralf.gebhardt Ralf Gebhardt made changes -
            Fix Version/s 10.5.6 [ 24508 ]
            ralf.gebhardt Ralf Gebhardt made changes -
            Fix Version/s 10.4.16 [ 25020 ]
            ralf.gebhardt Ralf Gebhardt made changes -
            Fix Version/s 10.4.15 [ 24507 ]
            serg Sergei Golubchik made changes -
            Workflow MariaDB v3 [ 110570 ] MariaDB v4 [ 158030 ]

            People

              bar Alexander Barkov
              tntnatbry Gagan Goel (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 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.