| 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)
