Bug #47296 Impossible WHERE does not give a proper warning
| Submitted: | 13 Sep 2009 23:25 | Modified: | 16 Sep 2009 1:35 |
|---|---|---|---|
| Reporter: | Roel Van de Paar | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: Errors | Severity: | S4 (Feature request) |
| Version: | 5.1.37 | OS: | Any |
| Assigned to: | CPU Architecture: | Any |
[13 Sep 2009 23:25]
Roel Van de Paar
[13 Sep 2009 23:29]
Roel Van de Paar
Verifying as D4
[14 Sep 2009 4:29]
Roel Van de Paar
Idea stemmed from bug #47005
[14 Sep 2009 4:38]
Roel Van de Paar
To clarify, notice that the table is declared as 'NOT NULL' while the statement is asking for 'IS NULL'. Another example: mysql> select * from t where 1=2; Empty set (0.00 sec) mysql> explain select * from t where 1=2; +----+-------------+-------+------+---------------+------+---------+------+------+------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+------------------+ | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE | +----+-------------+-------+------+---------------+------+---------+------+------+------------------+ 1 row in set (0.00 sec)
[14 Sep 2009 4:46]
Roel Van de Paar
Interesting to note: mysql> SELECT * FROM t WHERE t.row ='h'; Empty set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+---------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------+ | Warning | 1292 | Truncated incorrect DOUBLE value: 'h' | +---------+------+---------------------------------------+ 1 row in set (0.00 sec) mysql> EXPLAIN SELECT * FROM t WHERE t.row ='h'; +----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+ | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE noticed after reading const tables | +----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+ 1 row in set, 1 warning (0.00 sec)
[14 Sep 2009 16:21]
Sergei Golubchik
Where did you get an idea that "impossible WHERE" should produce a warning ?
[14 Sep 2009 23:45]
Roel Van de Paar
See my [14 Sep 6:29] comment
[15 Sep 2009 6:32]
Sergei Golubchik
The one with "Idea stemmed" ? I don't see where it follows from it that an "impossible WHERE" should produce a warning. Please clarify, why do you think that no warning for "impossible WHERE" is a bug.
[16 Sep 2009 1:35]
Roel Van de Paar
Why should an 'impossible where' not produce a warning? Are there any rules or guidelines for when a warning should be produced or not? Also, 'IS NULL' not matching any rows *if the table allows NULL* should not be a warning, but, if the table def. is NOT NULL, then the query can never match - hence a warning should be produced. Also, if EXPLAIN can see an impossible where, why can't the same be returned for any given instruction that is impossible (as EXPLAIN already does)?
[16 Sep 2009 1:52]
Roel Van de Paar
Note that EXPLAIN will tell you two different things: 1. Impossible WHERE <or> 2. Impossible WHERE noticed after reading const tables 1. Is seen when something is literally impossible in the instruction, as in the examples above i.e. IS NULL vs NULL, 2=3 etc. 2. Is seen when the SELECT statement itself is a possible instruction, but given the variable input to it, becomes impossible, for instance a > value_greater_than_int where a is an int, or a = 1 where a is 2. The very least that could be done for 1 is to provide a warning. One could argue that 2 should produce a warning and 1 should produce an error, though this may (or may not) be standard SQL.
[16 Sep 2009 1:53]
Roel Van de Paar
s/may (or may not)/may or may not/
[16 Sep 2009 11:41]
Sergei Golubchik
Okay, understand. You want "impossible WHERE" to be generate a warning. But the manual does not say that it should do that. It's a feature request.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.043 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.