[MDEV-21034] GREATEST() and LEAST() malfunction for NULL Created: 2019-11-11  Updated: 2023-04-27

Status: Confirmed
Project: MariaDB Server
Component/s: None
Affects Version/s: 5.5, 10.0, 10.1, 10.2, 10.3, 10.4
Fix Version/s: 10.4

Type: Bug Priority: Major
Reporter: Manuel Rigger Assignee: Alexander Barkov
Resolution: Unresolved Votes: 0
Labels: None
Environment:

Ubuntu 19.04


Issue Links:
Relates
relates to MDEV-21029 Incorrect result for expression with ... Confirmed

 Description   

Hi everyone,

On the latest trunk version (0308de9), GREATEST() and LEAST() seem to malfunction for NULL values:

CREATE TABLE t0(c0 INT);
INSERT INTO t0 VALUES (1);
SELECT * FROM t0 WHERE GREATEST(c0, NULL); -- unexpected: row is fetched

I would not expect the row to be fetched, because the WHERE condition should evaluate to NULL for that row:

SELECT GREATEST(c0, NULL) FROM t0; -- NULL



 Comments   
Comment by Alice Sherepa [ 2019-11-14 ]

Thank you for the report!
Reproducible on MariaDB 5.5-10.4 (and Mysql 5.6.40,5.7.26, but works correct in 8.0.16)

MariaDB [test]> SELECT 5 from dual WHERE LEAST(1, NULL); 
+---+
| 5 |
+---+
| 5 |
+---+
1 row in set (0.000 sec)
 
MariaDB [test]> SELECT LEAST(1, NULL); 
+----------------+
| LEAST(1, NULL) |
+----------------+
|           NULL |
+----------------+
1 row in set (0.000 sec)
 
MariaDB [test]> create table t0 (c0 int);
Query OK, 0 rows affected (0.023 sec)
 
MariaDB [test]> insert into t0 values (1),(0),(null);
Query OK, 3 rows affected (0.000 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
MariaDB [test]> SELECT * FROM t0 WHERE GREATEST(c0, NULL); 
+------+
| c0   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)

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