Commit 5be4148e authored by Sergey Petrunya's avatar Sergey Petrunya

BUG#834514: Assertion `!table || (!table->read_set || bitmap_is_set(...' with aggregates

- Make find_all_keys() not to rely on table->tmp_set remaining constant during execution
  quick_index_merge_select->reset() may change it.
parent 28a70509
...@@ -1594,4 +1594,24 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -1594,4 +1594,24 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index_merge a,b,c a,c 5,5 NULL 54 Using sort_union(a,c); Using where 1 SIMPLE t1 index_merge a,b,c a,c 5,5 NULL 54 Using sort_union(a,c); Using where
set optimizer_switch=default; set optimizer_switch=default;
drop table t0, t1; drop table t0, t1;
#
# BUG#834514 Assertion `!table || (!table->read_set || bitmap_is_set(...' with aggregates
#
CREATE TABLE t1 ( a int , b int, c int, KEY (b), PRIMARY KEY (a)) ;
INSERT INTO t1 VALUES (1,4,0),(5,0,0),(6,7,0),(7,7,0),(8,1,0),(9,7,0),(10,1,0);
CREATE TABLE t2 ( b int, c int, KEY (c,b)) ;
INSERT INTO t2 VALUES (7,0),(1,0),(7,0),(1,0);
CREATE TABLE t3 ( a int ) ;
SELECT COUNT(DISTINCT t2.b), CONCAT(t1.c)
FROM t1, t2
WHERE (t2.c = t1.c)
AND (
t1.b IN ( 4 )
OR t1.a = 137
AND EXISTS ( SELECT a FROM t3 )
)
GROUP BY 2;
COUNT(DISTINCT t2.b) CONCAT(t1.c)
2 0
DROP TABLE t1,t2,t3;
set optimizer_switch= @optimizer_switch_save; set optimizer_switch= @optimizer_switch_save;
...@@ -125,5 +125,29 @@ set optimizer_switch=default; ...@@ -125,5 +125,29 @@ set optimizer_switch=default;
drop table t0, t1; drop table t0, t1;
--echo #
--echo # BUG#834514 Assertion `!table || (!table->read_set || bitmap_is_set(...' with aggregates
--echo #
CREATE TABLE t1 ( a int , b int, c int, KEY (b), PRIMARY KEY (a)) ;
INSERT INTO t1 VALUES (1,4,0),(5,0,0),(6,7,0),(7,7,0),(8,1,0),(9,7,0),(10,1,0);
CREATE TABLE t2 ( b int, c int, KEY (c,b)) ;
INSERT INTO t2 VALUES (7,0),(1,0),(7,0),(1,0);
CREATE TABLE t3 ( a int ) ;
SELECT COUNT(DISTINCT t2.b), CONCAT(t1.c)
FROM t1, t2
WHERE (t2.c = t1.c)
AND (
t1.b IN ( 4 )
OR t1.a = 137
AND EXISTS ( SELECT a FROM t3 )
)
GROUP BY 2;
DROP TABLE t1,t2,t3;
set optimizer_switch= @optimizer_switch_save; set optimizer_switch= @optimizer_switch_save;
...@@ -624,15 +624,21 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, ...@@ -624,15 +624,21 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
SQL_SELECT::skip_record evaluates this condition. it may include a SQL_SELECT::skip_record evaluates this condition. it may include a
correlated subquery predicate, such that some field in the subquery correlated subquery predicate, such that some field in the subquery
refers to 'sort_form'. refers to 'sort_form'.
PSergey-todo: discuss the above with Timour.
*/ */
MY_BITMAP *tmp_read_set= sort_form->read_set;
MY_BITMAP *tmp_write_set= sort_form->write_set;
MY_BITMAP *tmp_vcol_set= sort_form->vcol_set;
if (select->cond->with_subselect) if (select->cond->with_subselect)
sort_form->column_bitmaps_set(save_read_set, save_write_set, sort_form->column_bitmaps_set(save_read_set, save_write_set,
save_vcol_set); save_vcol_set);
write_record= (select->skip_record(thd) > 0); write_record= (select->skip_record(thd) > 0);
if (select->cond->with_subselect) if (select->cond->with_subselect)
sort_form->column_bitmaps_set(&sort_form->tmp_set, sort_form->column_bitmaps_set(tmp_read_set,
&sort_form->tmp_set, tmp_write_set,
&sort_form->tmp_set); tmp_vcol_set);
} }
else else
write_record= true; write_record= true;
......
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