[MDEV-19434] erroneous NULL on numeric value Created: 2019-05-10  Updated: 2023-04-27

Status: Confirmed
Project: MariaDB Server
Component/s: None
Affects Version/s: 10.2.23, 10.3.14, 10.2, 10.3, 10.4
Fix Version/s: 10.4

Type: Bug Priority: Major
Reporter: Frank Messineo Assignee: Igor Babaev
Resolution: Unresolved Votes: 0
Labels: None
Environment:

CentOS (generic linux)



 Description   

Example query in MySQL:

 
mysql> select val from (SELECT val from (SELECT val    FROM ( SELECT SUM(1) AS val ) AS tab1 ) as tab2 ) as tab3   WHERE val IS NOT NULL;
+------+
| val  |
+------+
|    1 |
+------+
1 row in set (0,00 sec)

Wrong result in MariaDB:

MariaDB [(none)]> select val from (SELECT val from (SELECT val    FROM ( SELECT SUM(1) AS val ) AS tab1 ) as tab2 ) as tab3   WHERE val IS NOT NULL;
Empty set (0.001 sec)

but adding any limit clause, makes it "work":

MariaDB [(none)]> select val from (SELECT val from (SELECT val    FROM ( SELECT SUM(1) AS val limit 100000) AS tab1 ) as tab2 ) as tab3   WHERE val IS NOT NULL; 
+------+
| val  |
+------+
|    1 |
+------+
1 row in set (0.001 sec)



 Comments   
Comment by Alice Sherepa [ 2019-05-10 ]

Thanks a lot! Reproducible on MariaDB 10.2-10.4 with optimizer_switch='derived_merge=on'

MariaDB [test]> select val from (SELECT val from (SELECT val FROM ( SELECT SUM(1) AS val limit 1) tab1 ) as tab2 ) as tab3 WHERE val=1;
+------+
| val  |
+------+
|    1 |
+------+
1 row in set (0.00 sec)
 
MariaDB [test]> select val from (SELECT val from (SELECT val FROM ( SELECT SUM(1) AS val) tab1 ) as tab2 ) as tab3 WHERE val=1;
Empty set (0.00 sec)
 
MariaDB [test]> explain select val from (SELECT val from (SELECT val FROM ( SELECT SUM(1) AS val) tab1 ) as tab2 ) as tab3 WHERE val=1;
+------+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                               |
+------+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
|    1 | PRIMARY     | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Impossible WHERE noticed after reading const tables |
|    4 | DERIVED     | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Impossible HAVING                                   |
+------+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
2 rows in set (0.00 sec)
 
MariaDB [test]> set optimizer_switch='derived_merge=off';
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [test]> select val from (SELECT val from (SELECT val FROM ( SELECT SUM(1) AS val) tab1 ) as tab2 ) as tab3 WHERE val=1;
+------+
| val  |
+------+
|    1 |
+------+
1 row in set (0.01 sec)

Generated at Thu Feb 08 08:51:40 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.