summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Petrunya <psergey@askmonty.org>2014-06-07 23:45:05 +0200
committerSergey Petrunya <psergey@askmonty.org>2014-06-07 23:45:05 +0200
commit349e31d5a7a580b1a923d5702242e9be89f4546e (patch)
treec99956a4164ea9e3686ae779d1056d6e36ba90e2
parentee6f400fe1487b2b77e731189b92a753f6816e9a (diff)
parent71df035551939d4200f54280493d670f31eba796 (diff)
downloadmariadb-git-349e31d5a7a580b1a923d5702242e9be89f4546e.tar.gz
Merge
-rw-r--r--mysql-test/r/selectivity_no_engine.result28
-rw-r--r--mysql-test/t/selectivity_no_engine.test28
-rw-r--r--sql/sql_select.cc1
3 files changed, 57 insertions, 0 deletions
diff --git a/mysql-test/r/selectivity_no_engine.result b/mysql-test/r/selectivity_no_engine.result
index da39ec1b3b4..e07329422af 100644
--- a/mysql-test/r/selectivity_no_engine.result
+++ b/mysql-test/r/selectivity_no_engine.result
@@ -215,6 +215,34 @@ SELECT * FROM t1 AS t1_1, t1 AS t1_2 WHERE NOT ( t1_1.a <> 'baz');
a b a b
DROP TABLE t1;
#
+# MDEV-6308: Server crashes in table_multi_eq_cond_selectivity with ...
+#
+CREATE TABLE t1 (
+id varchar(40) COLLATE utf8_bin,
+dt datetime,
+PRIMARY KEY (id)
+);
+INSERT INTO t1 VALUES ('foo','2011-04-12 05:18:08'),
+('bar','2013-09-19 11:37:03');
+CREATE TABLE t2 (
+t1_id varchar(40) COLLATE utf8_bin,
+f1 varchar(64),
+f2 varchar(1024),
+KEY (f1,f2(255))
+);
+INSERT INTO t2 VALUES ('foo','baz','qux'),('bar','baz','qux');
+set optimizer_use_condition_selectivity=2;
+explain
+select * from t1,t2 where t1.id = t2.t1_id and t2.f2='qux' and t2.f1='baz';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ref f1 f1 325 const,const 1 Using index condition; Using where
+1 SIMPLE t1 eq_ref PRIMARY PRIMARY 122 test.t2.t1_id 1
+select * from t1,t2 where t1.id = t2.t1_id and t2.f2='qux' and t2.f1='baz';
+id dt t1_id f1 f2
+foo 2011-04-12 05:18:08 foo baz qux
+bar 2013-09-19 11:37:03 bar baz qux
+drop table t1,t2;
+#
# End of the test file
#
set use_stat_tables= @save_use_stat_tables;
diff --git a/mysql-test/t/selectivity_no_engine.test b/mysql-test/t/selectivity_no_engine.test
index 87e6b629762..4a7ad8a42c9 100644
--- a/mysql-test/t/selectivity_no_engine.test
+++ b/mysql-test/t/selectivity_no_engine.test
@@ -162,6 +162,34 @@ SELECT * FROM t1 AS t1_1, t1 AS t1_2 WHERE NOT ( t1_1.a <> 'baz');
DROP TABLE t1;
--echo #
+--echo # MDEV-6308: Server crashes in table_multi_eq_cond_selectivity with ...
+--echo #
+CREATE TABLE t1 (
+ id varchar(40) COLLATE utf8_bin,
+ dt datetime,
+ PRIMARY KEY (id)
+);
+
+INSERT INTO t1 VALUES ('foo','2011-04-12 05:18:08'),
+ ('bar','2013-09-19 11:37:03');
+
+CREATE TABLE t2 (
+ t1_id varchar(40) COLLATE utf8_bin,
+ f1 varchar(64),
+ f2 varchar(1024),
+ KEY (f1,f2(255))
+);
+
+INSERT INTO t2 VALUES ('foo','baz','qux'),('bar','baz','qux');
+
+set optimizer_use_condition_selectivity=2;
+explain
+select * from t1,t2 where t1.id = t2.t1_id and t2.f2='qux' and t2.f1='baz';
+select * from t1,t2 where t1.id = t2.t1_id and t2.f2='qux' and t2.f1='baz';
+
+drop table t1,t2;
+
+--echo #
--echo # End of the test file
--echo #
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index d430e8bc10d..692138fcddd 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -7367,6 +7367,7 @@ double table_cond_selectivity(JOIN *join, uint idx, JOIN_TAB *s,
Go through the "keypart{N}=..." equalities and find those that were
already taken into account in table->cond_selectivity.
*/
+ keyuse= pos->key;
while (keyuse->table == table && keyuse->key == key)
{
if (!(keyuse->used_tables & (rem_tables | table->map)))