Bug #60220 | Handler READ with no match + HANDLER NEXT produces wrong results for InnoDB | ||
---|---|---|---|
Submitted: | 23 Feb 2011 10:38 | Modified: | 19 Nov 2013 17:32 |
Reporter: | Michael Widenius | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S1 (Critical) |
Version: | 5.1.55/5.5.10 | OS: | Linux |
Assigned to: | CPU Architecture: | Any | |
Tags: | handler, innodb |
[23 Feb 2011 10:38]
Michael Widenius
[23 Feb 2011 11:04]
MySQL Verification Team
Thank you for the bug report. Verified as described: C:\DBS>c:\dbs\5.5\bin\mysql -uroot --port=3540 --prompt="mysql 5.5 >" Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.5.10 Source distribution Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 5.5 >USE D1 Database changed mysql 5.5 >DROP TABLE t1; Query OK, 0 rows affected (0.05 sec) mysql 5.5 >CREATE TABLE t1 ( no1 smallint(5) NOT NULL default '0', no2 int(10) NOT NULL default -> '0', PRIMARY KEY (no1,no2)) engine=innodb; Query OK, 0 rows affected (0.08 sec) mysql 5.5 >INSERT INTO t1 VALUES (1,274),(1,275),(2,6),(2,8),(4,1),(4,2); Query OK, 6 rows affected (0.03 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql 5.5 >HANDLER t1 OPEN; Query OK, 0 rows affected (0.00 sec) mysql 5.5 >HANDLER t1 READ `primary` = (1, 1000); Empty set (0.00 sec) mysql 5.5 >HANDLER t1 READ `primary` NEXT; +-----+-----+ | no1 | no2 | +-----+-----+ | 2 | 8 | +-----+-----+ 1 row in set (0.00 sec) mysql 5.5 >DROP TABLE t1; Query OK, 0 rows affected (0.04 sec) mysql 5.5 >CREATE TABLE t1 ( no1 smallint(5) NOT NULL default '0', no2 int(10) NOT NULL default -> '0', PRIMARY KEY (no1,no2)) engine=mYisam; Query OK, 0 rows affected (0.05 sec) mysql 5.5 >INSERT INTO t1 VALUES (1,274),(1,275),(2,6),(2,8),(4,1),(4,2); Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql 5.5 >HANDLER t1 OPEN; Query OK, 0 rows affected (0.00 sec) mysql 5.5 >HANDLER t1 READ `primary` = (1, 1000); Empty set (0.00 sec) mysql 5.5 >HANDLER t1 READ `primary` NEXT; +-----+-----+ | no1 | no2 | +-----+-----+ | 2 | 6 | +-----+-----+ 1 row in set (0.00 sec) mysql 5.5 >
[23 Feb 2011 11:13]
Jonas Oreland
Hi, I read the documentation for HANDLER (http://dev.mysql.com/doc/refman/5.1/en/handler.html), and find no description of what position a handler should be in if READ key does not find a record. So my interpretation is that this is UNDEFINED, and that NEXT can return any value...or maybe an error... (/me have a patch that adds HANDLER to ndb...and we would return error...in current version of patch) Or can you find it described anywhere ?
[28 Mar 2011 23:00]
Bugs System
No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open".
[29 Apr 2011 23:00]
Bugs System
No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open".
[4 May 2011 13:30]
Jonas Oreland
What feedback is this waiting on ?
[19 Nov 2013 17:32]
Daniel Price
This bug was addressed in a bug fix for a related bug (Oracle Bug#14621190). The fix is noted in 5.5.35, 5.6.15, and 5.7.3 changelogs. The changelog text for the related bug, as noted in the 5.5.35, 5.6.15, and 5.7.3 changelogs, is: When "index_read_map" is called for an exact search and fails to return a record due to non-matching search criteria, the cursor would be positioned on the next record after the searched key. A subsequent call to "index_next " would return the next record instead of returning the previous non-matching row, thereby skipping a record. Thank you for the bug report.