Fix for bug#58553, "Queries with pushed conditions causes 'explain extended'
to crash mysqld". handler::pushed_cond was not always properly reset when table objects where recycled via the table cache. handler::pushed_cond is now set to NULL in handler::ha_reset(). This should prevent pushed conditions from (incorrectly) re-apperaring in later queries.
This commit is contained in:
parent
99e95e8dab
commit
f4adb7c6e4
@ -4657,6 +4657,7 @@ int handler::ha_reset()
|
|||||||
free_io_cache(table);
|
free_io_cache(table);
|
||||||
/* reset the bitmaps to point to defaults */
|
/* reset the bitmaps to point to defaults */
|
||||||
table->default_column_bitmaps();
|
table->default_column_bitmaps();
|
||||||
|
pushed_cond= NULL;
|
||||||
DBUG_RETURN(reset());
|
DBUG_RETURN(reset());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2993,6 +2993,11 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
|
|||||||
table->insert_values= 0;
|
table->insert_values= 0;
|
||||||
table->fulltext_searched= 0;
|
table->fulltext_searched= 0;
|
||||||
table->file->ft_handler= 0;
|
table->file->ft_handler= 0;
|
||||||
|
/*
|
||||||
|
Check that there is no reference to a condtion from an earlier query
|
||||||
|
(cf. Bug#58553).
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(table->file->pushed_cond == NULL);
|
||||||
table->reginfo.impossible_range= 0;
|
table->reginfo.impossible_range= 0;
|
||||||
/* Catch wrong handling of the auto_increment_field_not_null. */
|
/* Catch wrong handling of the auto_increment_field_not_null. */
|
||||||
DBUG_ASSERT(!table->auto_increment_field_not_null);
|
DBUG_ASSERT(!table->auto_increment_field_not_null);
|
||||||
|
@ -6380,7 +6380,6 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
|
|||||||
tab->select_cond=sel->cond=tmp;
|
tab->select_cond=sel->cond=tmp;
|
||||||
/* Push condition to storage engine if this is enabled
|
/* Push condition to storage engine if this is enabled
|
||||||
and the condition is not guarded */
|
and the condition is not guarded */
|
||||||
tab->table->file->pushed_cond= NULL;
|
|
||||||
if (thd->variables.engine_condition_pushdown)
|
if (thd->variables.engine_condition_pushdown)
|
||||||
{
|
{
|
||||||
COND *push_cond=
|
COND *push_cond=
|
||||||
|
Loading…
x
Reference in New Issue
Block a user