Details
-
Bug
-
Status: Closed (View Workflow)
-
Minor
-
Resolution: Fixed
-
5.5.40, 10.0.14
-
None
Description
The manual at https://mariadb.com/kb/en/mariadb/documentation/functions-and-operators/control-flow-functions/nullif/ says that NULLIF(expr1,expr2) is the same as CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.
In fact it is not always true.
DROP TABLE IF EXISTS t1,t2; |
CREATE TABLE t1 (a TIME); |
CREATE TABLE t2 AS SELECT a,NULLIF(a,a), CASE WHEN a=a THEN NULL ELSE a END FROM t1; |
SHOW CREATE TABLE t2; |
returns:
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
| Table | Create Table |
|
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
| t2 | CREATE TABLE `t2` (
|
`a` time DEFAULT NULL,
|
`NULLIF(a,a)` varchar(10) DEFAULT NULL,
|
`CASE WHEN a=a THEN NULL ELSE a END` time DEFAULT NULL
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
Notice, NULLIF erroneously created a VARCHAR column, while CASE correctly created a TIME column.
Attachments
Activity
Field | Original Value | New Value |
---|---|---|
Description |
The manual at https://mariadb.com/kb/en/mariadb/documentation/functions-and-operators/control-flow-functions/nullif/ says that NULLIF(expr1,expr2) is the same as CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END. In fact it is not always true. {code:sql} DROP TABLE IF EXISTS t1,t2; CREATE TABLE t1 (a TIME); CREATE TABLE t2 AS SELECT a,NULLIF(a,a), CASE WHEN a=a THEN NULL ELSE a END FROM t1; SHOW CREATE TABLE t2; {code} returns: {noformat} +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | t2 | CREATE TABLE `t2` ( `a` time DEFAULT NULL, `NULLIF(a,a)` varchar(10) DEFAULT NULL, `CASE WHEN a=a THEN NULL ELSE a END` time DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ {noformat} Notice, NULLIF erroneously created a VARCHAR column, while CASE correctly created a TIME column. |
The manual at https://mariadb.com/kb/en/mariadb/documentation/functions-and-operators/control-flow-functions/nullif/ says that {{NULLIF(expr1,expr2)}} is the same as {{CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END}}. In fact it is not always true. {code:sql} DROP TABLE IF EXISTS t1,t2; CREATE TABLE t1 (a TIME); CREATE TABLE t2 AS SELECT a,NULLIF(a,a), CASE WHEN a=a THEN NULL ELSE a END FROM t1; SHOW CREATE TABLE t2; {code} returns: {noformat} +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | t2 | CREATE TABLE `t2` ( `a` time DEFAULT NULL, `NULLIF(a,a)` varchar(10) DEFAULT NULL, `CASE WHEN a=a THEN NULL ELSE a END` time DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ {noformat} Notice, NULLIF erroneously created a VARCHAR column, while CASE correctly created a TIME column. |
Fix Version/s | 10.0 [ 16000 ] |
Component/s | OTHER [ 10125 ] | |
Fix Version/s | 10.1.2 [ 15801 ] | |
Fix Version/s | 10.0 [ 16000 ] | |
Resolution | Fixed [ 1 ] | |
Status | Open [ 1 ] | Closed [ 6 ] |
Component/s | Temporal Types [ 11000 ] | |
Component/s | OTHER [ 10125 ] |
Workflow | MariaDB v2 [ 58108 ] | MariaDB v3 [ 65530 ] |
Workflow | MariaDB v3 [ 65530 ] | MariaDB v4 [ 148395 ] |