[MDEV-23323] Rounding functions return a wrong data type for a BIT, ENUM, SET argument Created: 2020-07-29  Updated: 2020-07-30  Resolved: 2020-07-30

Status: Closed
Project: MariaDB Server
Component/s: Data types
Affects Version/s: 10.1, 10.2, 10.3, 10.4, 10.5
Fix Version/s: 10.4.14, 10.5.5

Type: Bug Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-23032 FLOOR()/CEIL() incorrectly calculate ... Closed

 Description   

CREATE OR REPLACE TABLE t1 (a BIT(64));
INSERT INTO t1 VALUES (0xFFFFFFFFFFFFFFFF);
CREATE OR REPLACE TABLE t2 AS
  SELECT a, FLOOR(a), CEILING(a), TRUNCATE(a,0), ROUND(a) FROM t1;
SHOW CREATE TABLE t2;

+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                    |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t2    | CREATE TABLE `t2` (
  `a` bit(64) DEFAULT NULL,
  `FLOOR(a)` decimal(64,0) DEFAULT NULL,
  `CEILING(a)` decimal(64,0) DEFAULT NULL,
  `TRUNCATE(a,0)` bigint(64) unsigned DEFAULT NULL,
  `ROUND(a)` decimal(64,0) unsigned DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

The data type for all columns with functions are wrong. The expected data type is BIGINT(20) UNSIGNED.



 Comments   
Comment by Alexander Barkov [ 2020-07-29 ]

The same problem is repeatable with ENUM:

CREATE OR REPLACE TABLE t1 (a ENUM('999999999999999999999999999999999999999999999999999999999999'));
INSERT INTO t1 VALUES (1);
CREATE OR REPLACE TABLE t2 AS
  SELECT a, FLOOR(a), CEILING(a), TRUNCATE(a,0), ROUND(a) FROM t1;
SHOW CREATE TABLE t2;

+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t2    | CREATE TABLE `t2` (
  `a` enum('999999999999999999999999999999999999999999999999999999999999') DEFAULT NULL,
  `FLOOR(a)` decimal(60,0) DEFAULT NULL,
  `CEILING(a)` decimal(60,0) DEFAULT NULL,
  `TRUNCATE(a,0)` double(17,0) DEFAULT NULL,
  `ROUND(a)` double(17,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

The same problem is repeatable with SET:

CREATE OR REPLACE TABLE t1 (a SET('999999999999999999999999999999999999999999999999999999999999'));
INSERT INTO t1 VALUES (1);
CREATE OR REPLACE TABLE t2 AS
  SELECT a, FLOOR(a), CEILING(a), TRUNCATE(a,0), ROUND(a) FROM t1;
SHOW CREATE TABLE t2;

+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                               |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t2    | CREATE TABLE `t2` (
  `a` set('999999999999999999999999999999999999999999999999999999999999') DEFAULT NULL,
  `FLOOR(a)` decimal(60,0) DEFAULT NULL,
  `CEILING(a)` decimal(60,0) DEFAULT NULL,
  `TRUNCATE(a,0)` double(17,0) DEFAULT NULL,
  `ROUND(a)` double(17,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Generated at Thu Feb 08 09:21:32 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.