Bug #16069 | Using BETWEEN with a VIEW doesn't work correctly | ||
---|---|---|---|
Submitted: | 29 Dec 2005 14:03 | Modified: | 17 Apr 2006 18:43 |
Reporter: | hajni szab | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S2 (Serious) |
Version: | 5.0.17 | OS: | Windows (Windows XP) |
Assigned to: | Igor Babaev | CPU Architecture: | Any |
[29 Dec 2005 14:03]
hajni szab
[29 Dec 2005 15:17]
MySQL Verification Team
I was unable to repeat this issue with my own data, could you please provide a complete test case with table/view create query and some inserts for test. Thanks in advance.
[29 Dec 2005 19:35]
hajni szab
Complete test
Attachment: test.zip (application/x-zip-compressed, text), 140.26 KiB.
[6 Jan 2006 13:50]
hajni szab
Feedback?
[6 Jan 2006 13:51]
hajni szab
Can You repeat this problem with the sample data?
[27 Jan 2006 17:08]
Jorge del Conde
I was able to reproduce this using the supplied test-case under WinXP/ 5.0.18 and fresh pull under FC4
[8 Apr 2006 16:54]
Igor Babaev
The bug can be demonstrated with a simple example: mysql> CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, -> td date DEFAULT NULL, KEY idx(td)); Query OK, 0 rows affected (0.47 sec) mysql> INSERT INTO t1 VALUES -> (1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'), -> (4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'), -> (7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06'); Query OK, 9 rows affected (0.10 sec) Records: 9 Duplicates: 0 Warnings: 0 mysql> CREATE VIEW v1 AS SELECT * FROM t1; Query OK, 0 rows affected (0.31 sec) mysql> SELECT * FROM t1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04'; +----+------------+ | id | td | +----+------------+ | 2 | 2005-01-02 | | 3 | 2005-01-02 | | 4 | 2005-01-03 | | 5 | 2005-01-04 | +----+------------+ 4 rows in set (0.33 sec) mysql> SELECT * FROM v1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04'; Empty set (0.33 sec)
[8 Apr 2006 18:42]
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/4675
[17 Apr 2006 2:04]
Igor Babaev
ChangeSet 1.2148 06/04/08 11:42:09 igor@rurik.mysql.com +3 -0 Fixed bug #16069. The function agg_cmp_type in item_cmpfunc.cc neglected the fact that the first argument in a BETWEEN/IN predicate could be a field of a view. As a result in the case when the retrieved table was hidden by a view over it and the arguments in the BETWEEN/IN predicates are of the date/time type the function did not perform conversion of the constant arguments to the same format as the first field argument. If formats of the arguments differed it caused wrong a evaluation of the predicates. Fix will appear in 5.0.21 and 5.1.10
[17 Apr 2006 18:43]
Paul DuBois
Noted in 5.0.21, 5.1.10 changelogs. If the first argument to <literal>BETWEEN</literal> was a <literal>DATE</literal> or <literal>TIME</literal> column of a view and the other arguments were constants, <literal>BETWEEN</literal> did not perform conversion of the constants to the appropriate temporary type, resulting in incorrect evaluation. (Bug #16069)