mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 15:15:34 +02:00
Fixed bug #607566.
For queries with order by clauses that employed filesort usage of virtual column references in select lists could trigger assertion failures. It happened because a wrong vcol_set bitmap was used for filesort. It turned out that filesort required its own vcol_set bitmap. Made management of the vcol_set bitmaps similar to the management of the read_set and write_set bitmaps.
This commit is contained in:
parent
4f564a5443
commit
f78b870c9b
8 changed files with 69 additions and 21 deletions
|
|
@ -515,7 +515,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
|
|||
THD *thd= current_thd;
|
||||
volatile THD::killed_state *killed= &thd->killed;
|
||||
handler *file;
|
||||
MY_BITMAP *save_read_set, *save_write_set;
|
||||
MY_BITMAP *save_read_set, *save_write_set, *save_vcol_set;
|
||||
DBUG_ENTER("find_all_keys");
|
||||
DBUG_PRINT("info",("using: %s",
|
||||
(select ? select->quick ? "ranges" : "where":
|
||||
|
|
@ -552,6 +552,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
|
|||
/* Remember original bitmaps */
|
||||
save_read_set= sort_form->read_set;
|
||||
save_write_set= sort_form->write_set;
|
||||
save_vcol_set= sort_form->vcol_set;
|
||||
/* Set up temporary column read map for columns used by sort */
|
||||
bitmap_clear_all(&sort_form->tmp_set);
|
||||
/* Temporary set for register_used_fields and register_field_in_read_map */
|
||||
|
|
@ -560,7 +561,8 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
|
|||
if (select && select->cond)
|
||||
select->cond->walk(&Item::register_field_in_read_map, 1,
|
||||
(uchar*) sort_form);
|
||||
sort_form->column_bitmaps_set(&sort_form->tmp_set, &sort_form->tmp_set);
|
||||
sort_form->column_bitmaps_set(&sort_form->tmp_set, &sort_form->tmp_set,
|
||||
&sort_form->tmp_set);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
|
|
@ -643,7 +645,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
|
|||
DBUG_RETURN(HA_POS_ERROR);
|
||||
|
||||
/* Signal we should use orignal column read and write maps */
|
||||
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);
|
||||
|
||||
DBUG_PRINT("test",("error: %d indexpos: %d",error,indexpos));
|
||||
if (error != HA_ERR_END_OF_FILE)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue