summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2016-06-22 23:20:41 +0300
committerSergei Petrunia <psergey@askmonty.org>2016-06-22 23:20:41 +0300
commit3e03b89b0a683dd3b14d6ea24d2ca93accdfd61f (patch)
tree7a7dff827f7d79d5ed3406726bceec5910a83629
parent63120090f994cc78876944e9f7a76f53337fa46e (diff)
downloadmariadb-git-3e03b89b0a683dd3b14d6ea24d2ca93accdfd61f.tar.gz
MDEV-10185: Assertion `tree1->keys[key_no] && tree2->keys[key_no]' failed in
Make tree_or set correct SEL_TREE::keys_map for the result.
-rw-r--r--mysql-test/r/range.result11
-rw-r--r--mysql-test/r/range_mrr_icp.result11
-rw-r--r--mysql-test/t/range.test9
-rw-r--r--sql/opt_range.cc1
4 files changed, 32 insertions, 0 deletions
diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result
index a0e44f91d44..268bd184c58 100644
--- a/mysql-test/r/range.result
+++ b/mysql-test/r/range.result
@@ -2288,5 +2288,16 @@ Warnings:
Warning 1366 Incorrect string value: '\xF0\x9F\x98\x8E' for column 'a' at row 1
DROP TABLE t1;
#
+# MDEV-10185: Assertion `tree1->keys[key_no] && tree2->keys[key_no]' failed in
+# sel_trees_can_be_ored(RANGE_OPT_PARAM*, SEL_TREE*, SEL_TREE*, key_map*)
+#
+CREATE TABLE t1 (pk INT PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2);
+SELECT * FROM t1 WHERE pk != 1000 OR pk IN ( 1000, 0, 1, 100, 2 ) OR pk >= 5;
+pk
+1
+2
+DROP TABLE t1;
+#
# End of 10.1 tests
#
diff --git a/mysql-test/r/range_mrr_icp.result b/mysql-test/r/range_mrr_icp.result
index c16d3b4adae..5c6930f4323 100644
--- a/mysql-test/r/range_mrr_icp.result
+++ b/mysql-test/r/range_mrr_icp.result
@@ -2290,6 +2290,17 @@ Warnings:
Warning 1366 Incorrect string value: '\xF0\x9F\x98\x8E' for column 'a' at row 1
DROP TABLE t1;
#
+# MDEV-10185: Assertion `tree1->keys[key_no] && tree2->keys[key_no]' failed in
+# sel_trees_can_be_ored(RANGE_OPT_PARAM*, SEL_TREE*, SEL_TREE*, key_map*)
+#
+CREATE TABLE t1 (pk INT PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2);
+SELECT * FROM t1 WHERE pk != 1000 OR pk IN ( 1000, 0, 1, 100, 2 ) OR pk >= 5;
+pk
+1
+2
+DROP TABLE t1;
+#
# End of 10.1 tests
#
set optimizer_switch=@mrr_icp_extra_tmp;
diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test
index ba4928faffb..7f0e063124e 100644
--- a/mysql-test/t/range.test
+++ b/mysql-test/t/range.test
@@ -1817,5 +1817,14 @@ EXPLAIN SELECT * FROM t1 WHERE a<=>'😎';
DROP TABLE t1;
--echo #
+--echo # MDEV-10185: Assertion `tree1->keys[key_no] && tree2->keys[key_no]' failed in
+--echo # sel_trees_can_be_ored(RANGE_OPT_PARAM*, SEL_TREE*, SEL_TREE*, key_map*)
+--echo #
+CREATE TABLE t1 (pk INT PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2);
+SELECT * FROM t1 WHERE pk != 1000 OR pk IN ( 1000, 0, 1, 100, 2 ) OR pk >= 5;
+DROP TABLE t1;
+
+--echo #
--echo # End of 10.1 tests
--echo #
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 3d059abd666..b262b0c4191 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -8580,6 +8580,7 @@ tree_or(RANGE_OPT_PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2)
for e.g. "key IN (c1, ..., cN)" which produces a lot of ranges.
*/
result= tree1;
+ result->keys_map.clear_all();
}
else
{