summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/innodb_icp.result25
-rw-r--r--mysql-test/t/innodb_icp.test28
-rw-r--r--sql/sql_select.cc2
3 files changed, 54 insertions, 1 deletions
diff --git a/mysql-test/r/innodb_icp.result b/mysql-test/r/innodb_icp.result
index 07c75986392..e34a4469de2 100644
--- a/mysql-test/r/innodb_icp.result
+++ b/mysql-test/r/innodb_icp.result
@@ -907,5 +907,30 @@ OR a = c
ORDER BY e;
a b c d e
DROP TABLE t1,t2,t3;
+#
+# MDEV-5337: Wrong result in mariadb 5.5.32 with ORDER BY + LIMIT when index_condition_pushdown=on
+# MDEV-5512: Wrong result (WHERE clause ignored) with multiple clauses using Percona-XtraDB engine
+#
+create table t1(a int);
+insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t2 (pk int primary key,
+key1 char(32),
+key2 char(32),
+key(key1),
+key(key2)
+) engine=innodb;
+insert into t2 select
+A.a+10*B.a+100*C.a,
+concat('rare-', A.a+10*B.a),
+concat('rare-', A.a+10*B.a)
+from
+t1 A, t1 B, t1 C;
+update t2 set key1='frequent-val' where pk between 100 and 350;
+select * from t2 ignore key(PRIMARY)
+where key1='frequent-val' and key2 between 'rare-400' and 'rare-450' order by pk limit 2;
+pk key1 key2
+141 frequent-val rare-41
+142 frequent-val rare-42
+drop table t1, t2;
set optimizer_switch=@innodb_icp_tmp;
set storage_engine= @save_storage_engine;
diff --git a/mysql-test/t/innodb_icp.test b/mysql-test/t/innodb_icp.test
index d6caa36a88e..acb8238e01f 100644
--- a/mysql-test/t/innodb_icp.test
+++ b/mysql-test/t/innodb_icp.test
@@ -45,6 +45,34 @@ ORDER BY e;
DROP TABLE t1,t2,t3;
+--echo #
+--echo # MDEV-5337: Wrong result in mariadb 5.5.32 with ORDER BY + LIMIT when index_condition_pushdown=on
+--echo # MDEV-5512: Wrong result (WHERE clause ignored) with multiple clauses using Percona-XtraDB engine
+--echo #
+
+create table t1(a int);
+insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+
+create table t2 (pk int primary key,
+ key1 char(32),
+ key2 char(32),
+ key(key1),
+ key(key2)
+) engine=innodb;
+
+insert into t2 select
+ A.a+10*B.a+100*C.a,
+ concat('rare-', A.a+10*B.a),
+ concat('rare-', A.a+10*B.a)
+from
+ t1 A, t1 B, t1 C;
+update t2 set key1='frequent-val' where pk between 100 and 350;
+select * from t2 ignore key(PRIMARY)
+where key1='frequent-val' and key2 between 'rare-400' and 'rare-450' order by pk limit 2;
+
+drop table t1, t2;
+
+
set optimizer_switch=@innodb_icp_tmp;
set storage_engine= @save_storage_engine;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 9247485278d..5d74e2d7f13 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -19479,7 +19479,7 @@ check_reverse_order:
table->disable_keyread();
}
}
- else if (tab->type != JT_ALL)
+ else if (tab->type != JT_ALL || tab->select->quick)
{
/*
We're about to use a quick access to the table.