From 3e03b89b0a683dd3b14d6ea24d2ca93accdfd61f Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Wed, 22 Jun 2016 23:20:41 +0300 Subject: [PATCH] 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. --- mysql-test/r/range.result | 11 +++++++++++ mysql-test/r/range_mrr_icp.result | 11 +++++++++++ mysql-test/t/range.test | 9 +++++++++ sql/opt_range.cc | 1 + 4 files changed, 32 insertions(+) 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 @@ -1816,6 +1816,15 @@ INSERT INTO t1 VALUES ('a'),('b'),('c'),('d'),('e'); 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 {