Bug #52650 | select !!0 = 1 returns 1 | ||
---|---|---|---|
Submitted: | 7 Apr 2010 10:25 | Modified: | 7 Apr 2010 10:43 |
Reporter: | Michael Kolesnikov | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S2 (Serious) |
Version: | 5.1.45, 5.1.47-bzr | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | regression |
[7 Apr 2010 10:25]
Michael Kolesnikov
[7 Apr 2010 10:38]
Peter Laursen
observation: 5.0.90 is not affected, but 5.5.2 is too.
[7 Apr 2010 10:43]
Valeriy Kravchuk
This is easy to verify: mysql> select !0, !!0, ! !0, !(!0), !1, NOT NOT 0; +----+-----+------+-------+----+-----------+ | !0 | !!0 | ! !0 | !(!0) | !1 | NOT NOT 0 | +----+-----+------+-------+----+-----------+ | 1 | 1 | 0 | 0 | 0 | 0 | +----+-----+------+-------+----+-----------+ 1 row in set (0.00 sec) mysql> select version(); +--------------+ | version() | +--------------+ | 5.1.47-debug | +--------------+ 1 row in set (0.00 sec) Note that NOT NOT both provides a workaround. Here is the bug in a clear form: mysql> explain extended select !0, !!0; +----+-------------+-------+------+---------------+------+---------+------+------+----------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+----------+----------------+ | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used | +----+-------------+-------+------+---------------+------+---------+------+------+----------+----------------+ 1 row in set, 1 warning (0.00 sec) mysql> show warnings\G *************************** 1. row *************************** Level: Note Code: 1003 Message: select (not(0)) AS `!0`,(not(0)) AS `!!0` 1 row in set (0.00 sec)
[7 Apr 2010 10:46]
Valeriy Kravchuk
Yes, 5.0.x gives correct results: 77-52-28-202:5.0 openxs$ bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.91-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select !0, !!0, ! !0, !(!0), !1, NOT NOT 0; +----+-----+------+-------+----+-----------+ | !0 | !!0 | ! !0 | !(!0) | !1 | NOT NOT 0 | +----+-----+------+-------+----+-----------+ | 1 | 0 | 0 | 0 | 0 | 0 | +----+-----+------+-------+----+-----------+ 1 row in set (0.00 sec) So this is a regression, but I doubt that it interprets !!0 properly: mysql> explain extended select !0, !!0; +----+-------------+-------+------+---------------+------+---------+------+------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+----------------+ | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used | +----+-------------+-------+------+---------------+------+---------+------+------+----------------+ 1 row in set, 1 warning (0.00 sec) mysql> show warnings\G *************************** 1. row *************************** Level: Note Code: 1003 Message: select (not(0)) AS `!0`,(0 <> 0) AS `!!0` 1 row in set (0.00 sec) It just happens to produce expected result :)
[7 Apr 2013 8:13]
Hartmut Holzgraefe
still reproducible in 5.6.10