Hi Sergei,
I've run a set of tests on the fix and they went uneventfully, but I've
also started the same set on the tree without the fix to make sure they
produce enough failures and thus are efficient enough to verify the fix.
/E
On 7/4/2012 2:39 PM, Sergei Petrunia wrote:
Hi Elena,
Could you please re-run the tests with this fix:
----- Forwarded message from Sergey Petrunya <[email protected]> -----
From: Sergey Petrunya <[email protected]>
To: [email protected]
X-Mailer: mail (GNU Mailutils 1.2)
Date: Wed, 4 Jul 2012 13:34:48 +0300 (EEST)
Subject: [Commits] Rev 3458: MDEV-376: Wrong result (missing rows) with
index_merge+index_merge_intersection,
join in file:///home/psergey/dev2/5.5-look6/
At file:///home/psergey/dev2/5.5-look6/
------------------------------------------------------------
revno: 3458
revision-id: [email protected]
parent: [email protected]
committer: Sergey Petrunya <[email protected]>
branch nick: 5.5-look6
timestamp: Wed 2012-07-04 14:34:45 +0400
message:
MDEV-376: Wrong result (missing rows) with
index_merge+index_merge_intersection, join
- Let QUICK_RANGE_SELECT::init_ror_merged_scan() call quick->reset() only
after we've set the column read bitmaps.
=== modified file 'mysql-test/r/index_merge_innodb.result'
--- a/mysql-test/r/index_merge_innodb.result 2012-06-06 19:26:40 +0000
+++ b/mysql-test/r/index_merge_innodb.result 2012-07-04 10:34:45 +0000
@@ -777,4 +777,19 @@ commit;
select * from t1 where t1.zone_id=830 AND modified=9;
pk zone_id modified
drop table t0, t1;
+#
+# MDEV-376: Wrong result (missing rows) with
index_merge+index_merge_intersection, join
+#
+CREATE TABLE t1 (
+a INT, b CHAR(1), c CHAR(1), KEY(a), KEY(b)
+) ENGINE=InnoDB;
+INSERT INTO t1 VALUES (8,'v','v'),(8,'m','m'),(9,'d','d');
+SELECT ta.* FROM t1 AS ta, t1 AS tb
+WHERE ( tb.b != ta.b OR tb.a = ta.a )
+AND ( tb.b = ta.c OR tb.b = ta.b );
+a b c
+8 v v
+8 m m
+9 d d
+DROP TABLE t1;
set optimizer_switch= @optimizer_switch_save;
=== modified file 'mysql-test/t/index_merge_innodb.test'
--- a/mysql-test/t/index_merge_innodb.test 2012-06-04 15:26:11 +0000
+++ b/mysql-test/t/index_merge_innodb.test 2012-07-04 10:34:45 +0000
@@ -156,6 +156,21 @@ select * from t1 where t1.zone_id=830 AN
drop table t0, t1;
+--echo #
+--echo # MDEV-376: Wrong result (missing rows) with
index_merge+index_merge_intersection, join
+--echo #
+CREATE TABLE t1 (
+ a INT, b CHAR(1), c CHAR(1), KEY(a), KEY(b)
+) ENGINE=InnoDB;
+
+INSERT INTO t1 VALUES (8,'v','v'),(8,'m','m'),(9,'d','d');
+
+
+SELECT ta.* FROM t1 AS ta, t1 AS tb
+WHERE ( tb.b != ta.b OR tb.a = ta.a )
+ AND ( tb.b = ta.c OR tb.b = ta.b );
+
+DROP TABLE t1;
set optimizer_switch= @optimizer_switch_save;
=== modified file 'sql/opt_range.cc'
--- a/sql/opt_range.cc 2012-06-04 15:26:11 +0000
+++ b/sql/opt_range.cc 2012-07-04 10:34:45 +0000
@@ -2008,7 +2008,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_
if (reuse_handler)
{
DBUG_PRINT("info", ("Reusing handler 0x%lx", (long) file));
- if (init() || reset())
+ if (init())
{
DBUG_RETURN(1);
}
@@ -2043,7 +2043,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_
if (file->ha_external_lock(thd, F_RDLCK))
goto failure;
- if (init() || reset())
+ if (init())
{
file->ha_external_lock(thd, F_UNLCK);
file->ha_close();
@@ -2090,7 +2090,18 @@ int QUICK_RANGE_SELECT::init_ror_merged_
head->key_read= org_key_read;
bitmap_copy(&column_bitmap, head->read_set);
head->column_bitmaps_set(&column_bitmap, &column_bitmap);
-
+
+ if (reset())
+ {
+ if (!reuse_handler)
+ {
+ file->ha_external_lock(thd, F_UNLCK);
+ file->ha_close();
+ goto failure;
+ }
+ else
+ DBUG_RETURN(1);
+ }
DBUG_RETURN(0);
failure:
_______________________________________________
commits mailing list
[email protected]
https://lists.askmonty.org/cgi-bin/mailman/listinfo/commits
----- End forwarded message -----
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to : [email protected]
Unsubscribe : https://launchpad.net/~maria-developers
More help : https://help.launchpad.net/ListHelp