Bug #27704 row comparisation returns wrong results
| Submitted: | 8 Apr 2007 15:35 | Modified: | 24 Apr 2007 17:38 |
|---|---|---|---|
| Reporter: | Martin Friebe (Gold Quality Contributor) (OCA) | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 4.1.23,5.0.40,5.1BK | OS: | Any |
| Assigned to: | Gleb Shchepa | CPU Architecture: | Any |
| Tags: | compare, Contribution, null, qc, row | ||
[8 Apr 2007 15:35]
Martin Friebe
[8 Apr 2007 15:35]
Martin Friebe
patch
Attachment: row_cmp.patch (text/x-patch), 4.38 KiB.
[8 Apr 2007 15:35]
Martin Friebe
test
Attachment: row_cmp_test.tar.gz (application/x-gzip, text), 1.78 KiB.
[8 Apr 2007 22:19]
MySQL Verification Team
Thank you for the bug report and contribution patch.
[18 Apr 2007 16:30]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/24802 ChangeSet@1.2451, 2007-04-18 21:30:41+05:00, gshchepa@gshchepa.loc +4 -0 Bug#27704: row comparisation returns wrong results. Support for NULL cells was incomplete for row comparison. Fixed.
[19 Apr 2007 10:36]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/24895 ChangeSet@1.2636, 2007-04-19 15:31:34+05:00, gshchepa@gshchepa.loc +4 -0 Bug#27704: incorrect comparison of rows with NULL components Support for NULL components was incomplete for row comparison. Fixed.
[19 Apr 2007 14:36]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/24904 ChangeSet@1.2636, 2007-04-19 19:40:27+05:00, gshchepa@gshchepa.loc +4 -0 Bug#27704: incorrect comparison of rows with NULL components Support for NULL components was incomplete for row comparison. Fixed.
[19 Apr 2007 18:35]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/24931 ChangeSet@1.2636, 2007-04-19 23:40:20+05:00, gshchepa@gshchepa.loc +5 -0 Bug#27704: incorrect comparison of rows with NULL components Support for NULL components was incomplete for row comparison, fixed. Added support for abort_on_null at compare_row() like in 5.x
[19 Apr 2007 19:40]
Gleb Shchepa
4.1 is affected too, but only <> operation is incorrect: mysql> select version(); +--------------+ | version() | +--------------+ | 4.1.23-debug | +--------------+ 1 row in set (0.00 sec) mysql> select 1 from dual where (1,3) <> (null,4); Empty set (0.00 sec) mysql> select (1,3) < (null,4); +------------------+ | (1,3) < (null,4) | +------------------+ | NULL | +------------------+ 1 row in set (0.00 sec) mysql> select 1 from DUAL where (1,3) < (null,4); Empty set (0.00 sec)
[19 Apr 2007 20:53]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/24952 ChangeSet@1.2636, 2007-04-20 01:59:16+05:00, gshchepa@gshchepa.loc +5 -0 Bug#27704: incorrect comparison of rows with NULL components Support for NULL components was incomplete for row comparison, fixed. Added support for abort_on_null at compare_row() like in 5.x
[19 Apr 2007 21:50]
Martin Friebe
Actually in 4.1 both the = and the <> are affected. 4.1 is inconsistent. If the null occurs before the explicit diff, the result is null. If it occurs after the diff, the result is non-null Results from 4.1 # explicit diff only after null select row(1,null,2) = row(1,null,3), row(1,null,2) <> row(1,null,3); +-------------------------------+--------------------------------+ | row(1,null,2) = row(1,null,3) | row(1,null,2) <> row(1,null,3) | +-------------------------------+--------------------------------+ | NULL | NULL | +-------------------------------+--------------------------------+ # explicit diff before null select row(3,null,2) = row(1,null,3), row(3,null,2) <> row(1,null,3); +-------------------------------+--------------------------------+ | row(3,null,2) = row(1,null,3) | row(3,null,2) <> row(1,null,3) | +-------------------------------+--------------------------------+ | 0 | 1 | +-------------------------------+--------------------------------+
[20 Apr 2007 9:43]
Gleb Shchepa
In 4.1 incorrect row comparison affects subselects:
mysql> drop table t, t1, t2;
Query OK, 0 rows affected (0.00 sec)
mysql> create table t1 (a int, b int, c varchar(10));
Query OK, 0 rows affected (1.51 sec)
mysql> create table t2 (a int);
Query OK, 0 rows affected (1.39 sec)
mysql> insert into t1 values (1,2,'a'),(2,3,'b'),(3,4,'c');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> insert into t2 values (1),(2),(NULL);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select a,
(select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a') as sub1,
(select c from t1 where a=t2.a) as sub2 from t2;
+------+------+------+
| a | sub1 | sub2 |
+------+------+------+
| 1 | 1 | a |
| 2 | 0 | b |
| NULL | NULL | NULL |
+------+------+------+
3 rows in set (0.00 sec)
Last query result shold be:
+------+------+------+
| a | sub1 | sub2 |
+------+------+------+
| 1 | 1 | a |
| 2 | 0 | b |
| NULL | 0 | NULL |
+------+------+------+
3 rows in set (0.00 sec)
because
mysql> select a,b,c from t1 where t1.a=NULL;
Empty set (0.00 sec)
and the result of equality check of empty set and some row is FALSE (or 0), not NULL.
This bug doesn't affect 5.x.
[20 Apr 2007 10:09]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/24988 ChangeSet@1.2636, 2007-04-20 15:14:09+05:00, gshchepa@gshchepa.loc +5 -0 Bug#27704: incorrect comparison of rows with NULL components Support for NULL components was incomplete for row comparison, fixed. Added support for abort_on_null at compare_row() like in 5.x
[21 Apr 2007 15:19]
Bugs System
Pushed into 5.1.18-beta
[21 Apr 2007 15:20]
Bugs System
Pushed into 5.0.42
[21 Apr 2007 15:21]
Bugs System
Pushed into 4.1.23
[24 Apr 2007 17:38]
Paul DuBois
Noted in 4.1.23, 5.0.42, 5.1.18 changelogs. Comparisons using row constructors could fail for rows containing NULL values.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.075 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.