[MDEV-21032] Index causes incorrect result when comparing float-point number with INT 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.4.11, 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

 Description   

Hi everyone,

On the latest trunk version (0308de9), I could observe a bug, as demonstrated by the following test case:

CREATE TABLE t0(c0 INT);
INSERT INTO t0 VALUES (1);
CREATE INDEX i0 ON t0(c0);
SELECT * FROM t0 WHERE 0.5 = c0; -- unexpected: row is fetched

Only when the index is created does MariaDB compute an incorrect result set, containing the row. As demonstrated below, the expression should evaluate to FALSE:

SELECT 0.5 = c0 FROM t0; -- evaluates to FALSE



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

Thanks! I repeated on MariaDB 5.5-10.4, Mysql 5.6-5.7, works as expected on Mysql 8.0.16

MariaDB [test]> CREATE TABLE t0(c0 INT, index(c0));
Query OK, 0 rows affected (0.030 sec)
 
MariaDB [test]> INSERT INTO t0 VALUES (1),(2),(3);
Query OK, 3 rows affected (0.001 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
MariaDB [test]> SELECT * FROM t0 WHERE 0.5 = c0;
+------+
| c0   |
+------+
|    1 |
+------+
1 row in set (0.001 sec)

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