Commit 7f09ed8d authored by Jan Wedvik's avatar Jan Wedvik

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.
parent b7db3720
...@@ -4657,6 +4657,7 @@ int handler::ha_reset() ...@@ -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, ...@@ -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) ...@@ -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=
......
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