after merge & valgrind test fixes (BUG#2120)
This commit is contained in:
parent
ff0a6e9686
commit
0aa7a4b4ea
@ -204,6 +204,8 @@ static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
|
|||||||
table->file->info(HA_STATUS_VARIABLE);
|
table->file->info(HA_STATUS_VARIABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!lex->describe)
|
||||||
|
unit->cleanup();
|
||||||
if (res)
|
if (res)
|
||||||
free_tmp_table(thd, table);
|
free_tmp_table(thd, table);
|
||||||
else
|
else
|
||||||
|
@ -988,6 +988,7 @@ void st_select_lex_unit::init_query()
|
|||||||
union_result= 0;
|
union_result= 0;
|
||||||
table= 0;
|
table= 0;
|
||||||
fake_select_lex= 0;
|
fake_select_lex= 0;
|
||||||
|
cleaned= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void st_select_lex::init_query()
|
void st_select_lex::init_query()
|
||||||
|
@ -305,7 +305,8 @@ protected:
|
|||||||
ulong found_rows_for_union;
|
ulong found_rows_for_union;
|
||||||
bool prepared, // prepare phase already performed for UNION (unit)
|
bool prepared, // prepare phase already performed for UNION (unit)
|
||||||
optimized, // optimize phase already performed for UNION (unit)
|
optimized, // optimize phase already performed for UNION (unit)
|
||||||
executed; // already executed
|
executed, // already executed
|
||||||
|
cleaned;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// list of fields which points to temporary table for union
|
// list of fields which points to temporary table for union
|
||||||
|
@ -1510,12 +1510,7 @@ JOIN::cleanup()
|
|||||||
JOIN_TAB *tab, *end;
|
JOIN_TAB *tab, *end;
|
||||||
for (tab= join_tab, end= tab+tables ; tab != end ; tab++)
|
for (tab= join_tab, end= tab+tables ; tab != end ; tab++)
|
||||||
{
|
{
|
||||||
delete tab->select;
|
tab->cleanup();
|
||||||
delete tab->quick;
|
|
||||||
tab->select=0;
|
|
||||||
tab->quick=0;
|
|
||||||
x_free(tab->cache.buff);
|
|
||||||
tab->cache.buff= 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tmp_join->tmp_join= 0;
|
tmp_join->tmp_join= 0;
|
||||||
@ -3759,6 +3754,41 @@ bool error_if_full_join(JOIN *join)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
cleanup JOIN_TAB
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
JOIN_TAB::cleanup()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void JOIN_TAB::cleanup()
|
||||||
|
{
|
||||||
|
delete select;
|
||||||
|
select= 0;
|
||||||
|
delete quick;
|
||||||
|
quick= 0;
|
||||||
|
x_free(cache.buff);
|
||||||
|
cache.buff= 0;
|
||||||
|
if (table)
|
||||||
|
{
|
||||||
|
if (table->key_read)
|
||||||
|
{
|
||||||
|
table->key_read= 0;
|
||||||
|
table->file->extra(HA_EXTRA_NO_KEYREAD);
|
||||||
|
}
|
||||||
|
/* Don't free index if we are using read_record */
|
||||||
|
if (!read_record.table)
|
||||||
|
table->file->index_end();
|
||||||
|
/*
|
||||||
|
We need to reset this for next select
|
||||||
|
(Tested in part_of_refkey)
|
||||||
|
*/
|
||||||
|
table->reginfo.join_tab= 0;
|
||||||
|
}
|
||||||
|
end_read_record(&read_record);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Free resources of given join
|
Free resources of given join
|
||||||
|
|
||||||
@ -3803,29 +3833,7 @@ JOIN::join_free(bool full)
|
|||||||
{
|
{
|
||||||
for (tab= join_tab, end= tab+tables; tab != end; tab++)
|
for (tab= join_tab, end= tab+tables; tab != end; tab++)
|
||||||
{
|
{
|
||||||
delete tab->select;
|
tab->cleanup();
|
||||||
delete tab->quick;
|
|
||||||
tab->select=0;
|
|
||||||
tab->quick=0;
|
|
||||||
x_free(tab->cache.buff);
|
|
||||||
tab->cache.buff= 0;
|
|
||||||
if (tab->table)
|
|
||||||
{
|
|
||||||
if (tab->table->key_read)
|
|
||||||
{
|
|
||||||
tab->table->key_read= 0;
|
|
||||||
tab->table->file->extra(HA_EXTRA_NO_KEYREAD);
|
|
||||||
}
|
|
||||||
/* Don't free index if we are using read_record */
|
|
||||||
if (!tab->read_record.table)
|
|
||||||
tab->table->file->index_end();
|
|
||||||
/*
|
|
||||||
We need to reset this for next select
|
|
||||||
(Tested in part_of_refkey)
|
|
||||||
*/
|
|
||||||
tab->table->reginfo.join_tab= 0;
|
|
||||||
}
|
|
||||||
end_read_record(&tab->read_record);
|
|
||||||
}
|
}
|
||||||
table= 0;
|
table= 0;
|
||||||
}
|
}
|
||||||
|
@ -108,6 +108,8 @@ typedef struct st_join_table {
|
|||||||
TABLE_REF ref;
|
TABLE_REF ref;
|
||||||
JOIN_CACHE cache;
|
JOIN_CACHE cache;
|
||||||
JOIN *join;
|
JOIN *join;
|
||||||
|
|
||||||
|
void cleanup();
|
||||||
} JOIN_TAB;
|
} JOIN_TAB;
|
||||||
|
|
||||||
|
|
||||||
|
@ -442,6 +442,12 @@ int st_select_lex_unit::cleanup()
|
|||||||
int error= 0;
|
int error= 0;
|
||||||
DBUG_ENTER("st_select_lex_unit::cleanup");
|
DBUG_ENTER("st_select_lex_unit::cleanup");
|
||||||
|
|
||||||
|
if (cleaned)
|
||||||
|
{
|
||||||
|
DBUG_RETURN(0);
|
||||||
|
}
|
||||||
|
cleaned= 0;
|
||||||
|
|
||||||
if (union_result)
|
if (union_result)
|
||||||
{
|
{
|
||||||
delete union_result;
|
delete union_result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user