Bug #44372 | bug 22125 affects handler::index_next_same in 5.1 | ||
---|---|---|---|
Submitted: | 20 Apr 2009 20:17 | Modified: | 31 Jul 2009 8:19 |
Reporter: | Zardosht Kasheff (OCA) | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 5.1.30, 5.1 bzr | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[20 Apr 2009 20:17]
Zardosht Kasheff
[31 Jul 2009 8:19]
Sveta Smirnova
Thank you for the report. Verified as described. To repeat apply patch following to 5.1 tree: $bzr diff === modified file 'storage/myisam/ha_myisam.cc' --- storage/myisam/ha_myisam.cc 2009-07-08 12:11:34 +0000 +++ storage/myisam/ha_myisam.cc 2009-07-31 08:07:33 +0000 @@ -1724,7 +1724,7 @@ return error; } -int ha_myisam::index_next_same(uchar *buf, +int ha_myisam::index_next_same1(uchar *buf, const uchar *key __attribute__((unused)), uint length __attribute__((unused))) { === modified file 'storage/myisam/ha_myisam.h' --- storage/myisam/ha_myisam.h 2009-07-08 12:11:34 +0000 +++ storage/myisam/ha_myisam.h 2009-07-31 08:07:20 +0000 @@ -75,7 +75,7 @@ int index_prev(uchar * buf); int index_first(uchar * buf); int index_last(uchar * buf); - int index_next_same(uchar *buf, const uchar *key, uint keylen); + int index_next_same1(uchar *buf, const uchar *key, uint keylen); int ft_init() { if (!ft_handler) Then modify test as following: $cat t/falcon_bug_22125.test # # Bug #22125: Falcon: Double precision searches fail if index exists # --echo *** Bug #22125 *** # ----------------------------------------------------- # # --- Initialisation --- # # ----------------------------------------------------- # #let $engine = 'Falcon'; let $engine = 'MyISAM'; eval SET @@storage_engine = $engine; --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings CREATE TABLE t1 ( f1 double, f2 char(5), f3 double, f4 int ); INSERT INTO t1 VALUES (0,'zero',0,1); INSERT INTO t1 VALUES (1.7976931348623157E+308,'max',0,3); INSERT INTO t1 VALUES (1.7976931348623157E+308,'min',0,4); UPDATE t1 SET f1 = 1 / f1 WHERE f2 = 'min'; INSERT INTO t1 VALUES (1.7976931348623157E+308,'nan',0,5); INSERT INTO t1 VALUES (1.7976931348623157E+308,'inf',0,6); INSERT INTO t1 SELECT -f1,concat('-',f2),f3,-f4 FROM t1; UPDATE t1 SET f3 = -f3 WHERE f2 = '-nan'; CREATE INDEX it1 on t1 (f1); # ----------------------------------------------------- # # --- Test --- # # ----------------------------------------------------- # SELECT * FROM t1 ORDER BY f1,f2,f3,f4; SELECT count(*) FROM t1 where f1 = 0; SELECT count(*) FROM t1 where f1 < 1; # Without index we get correct count. DROP INDEX it1 ON t1; SELECT count(*) FROM t1 where f1 = 0; SELECT count(*) FROM t1 where f1 < 1; # ----------------------------------------------------- # # --- Check --- # # ----------------------------------------------------- # SELECT count(*) FROM t1; # ----------------------------------------------------- # # --- Final cleanup --- # # ----------------------------------------------------- # DROP TABLE t1; Get -0 and wrong count in result