Commit b9bbe4a1 authored by Sergey Petrunya's avatar Sergey Petrunya

BUG#978479: Wrong result (extra rows) with...

BUG#978479: Wrong result (extra rows) with derived_with_keys+loosescan+semijoin=ON, materialization=OFF
- Part#2: Don't try to construct a LooseScan access on indexes that do not guarantee 
  index-ordered reads.
parent 994c6db2
...@@ -2680,10 +2680,23 @@ EXPLAIN ...@@ -2680,10 +2680,23 @@ EXPLAIN
SELECT * FROM t1 AS t1_1, t1 AS t1_2 SELECT * FROM t1 AS t1_1, t1 AS t1_2
WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 ); WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 );
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1_1 ALL NULL NULL NULL NULL 11 1 PRIMARY t1_1 ALL NULL NULL NULL NULL 11 Using where
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 11 Using where; LooseScan 1 PRIMARY <derived3> ref key0 key0 5 test.t1_1.a 2 Start temporary
1 PRIMARY t1_2 ALL NULL NULL NULL NULL 11 Using where 1 PRIMARY t1_2 ALL NULL NULL NULL NULL 11 Using where; End temporary
3 DERIVED t1 ALL NULL NULL NULL NULL 11 3 DERIVED t1 ALL NULL NULL NULL NULL 11
SELECT * FROM t1 AS t1_1, t1 AS t1_2
WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 );
a b a b
3 1 9 1
5 8 4 0
3 9 9 1
2 4 6 8
2 4 4 0
2 6 6 8
2 6 4 0
5 4 4 0
7 7 7 7
5 4 4 0
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
set @@join_cache_level= @tmp_jcl_978479; set @@join_cache_level= @tmp_jcl_978479;
......
...@@ -2694,10 +2694,23 @@ EXPLAIN ...@@ -2694,10 +2694,23 @@ EXPLAIN
SELECT * FROM t1 AS t1_1, t1 AS t1_2 SELECT * FROM t1 AS t1_1, t1 AS t1_2
WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 ); WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 );
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1_1 ALL NULL NULL NULL NULL 11 1 PRIMARY t1_1 ALL NULL NULL NULL NULL 11 Using where
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 11 Using where; LooseScan 1 PRIMARY <derived3> ref key0 key0 5 test.t1_1.a 2 Start temporary
1 PRIMARY t1_2 ALL NULL NULL NULL NULL 11 Using where 1 PRIMARY t1_2 ALL NULL NULL NULL NULL 11 Using where; End temporary
3 DERIVED t1 ALL NULL NULL NULL NULL 11 3 DERIVED t1 ALL NULL NULL NULL NULL 11
SELECT * FROM t1 AS t1_1, t1 AS t1_2
WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 );
a b a b
3 1 9 1
5 8 4 0
3 9 9 1
2 4 6 8
2 4 4 0
2 6 6 8
2 6 4 0
5 4 4 0
7 7 7 7
5 4 4 0
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
set @@join_cache_level= @tmp_jcl_978479; set @@join_cache_level= @tmp_jcl_978479;
......
...@@ -2390,6 +2390,9 @@ EXPLAIN ...@@ -2390,6 +2390,9 @@ EXPLAIN
SELECT * FROM t1 AS t1_1, t1 AS t1_2 SELECT * FROM t1 AS t1_1, t1 AS t1_2
WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 ); WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 );
SELECT * FROM t1 AS t1_1, t1 AS t1_2
WHERE (t1_1.a, t1_2.a) IN ( SELECT a, b FROM v1 );
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
set @@join_cache_level= @tmp_jcl_978479; set @@join_cache_level= @tmp_jcl_978479;
......
...@@ -130,7 +130,9 @@ class Loose_scan_opt ...@@ -130,7 +130,9 @@ class Loose_scan_opt
void add_keyuse(table_map remaining_tables, KEYUSE *keyuse) void add_keyuse(table_map remaining_tables, KEYUSE *keyuse)
{ {
if (try_loosescan && keyuse->sj_pred_no != UINT_MAX) if (try_loosescan && keyuse->sj_pred_no != UINT_MAX &&
(keyuse->table->file->index_flags(keyuse->key, 0, 1 ) & HA_READ_ORDER))
{ {
if (!(remaining_tables & keyuse->used_tables)) if (!(remaining_tables & keyuse->used_tables))
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment