1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

Merge bk-internal.mysql.com:/home/bk/mysql-4.1/

into serg.mylan:/usr/home/serg/Abk/mysql-4.1


sql/sql_select.cc:
  Auto merged
This commit is contained in:
unknown
2004-06-24 19:47:53 +02:00
5 changed files with 59 additions and 17 deletions

View File

@ -3852,6 +3852,8 @@ JOIN::join_free(bool full)
JOIN_TAB *tab,*end;
DBUG_ENTER("JOIN::join_free");
full= full || !select_lex->uncacheable;
if (table)
{
/*
@ -3863,7 +3865,18 @@ JOIN::join_free(bool full)
free_io_cache(table[const_tables]);
filesort_free_buffers(table[const_tables]);
}
if (full || !select_lex->uncacheable)
for (SELECT_LEX_UNIT *unit= select_lex->first_inner_unit(); unit;
unit= unit->next_unit())
{
JOIN *join;
for (SELECT_LEX *sl= unit->first_select_in_union(); sl;
sl= sl->next_select())
if ((join= sl->join))
join->join_free(full);
}
if (full)
{
for (tab= join_tab, end= tab+tables; tab != end; tab++)
tab->cleanup();
@ -3873,22 +3886,27 @@ JOIN::join_free(bool full)
{
for (tab= join_tab, end= tab+tables; tab != end; tab++)
{
if (tab->table && tab->table->file->inited == handler::RND)
tab->table->file->ha_rnd_end();
if (tab->table)
tab->table->file->ha_index_or_rnd_end();
}
}
}
/*
We are not using tables anymore
Unlock all tables. We may be in an INSERT .... SELECT statement.
*/
if ((full || !select_lex->uncacheable) &&
lock && thd->lock &&
!(select_options & SELECT_NO_UNLOCK))
if (full && lock && thd->lock && !(select_options & SELECT_NO_UNLOCK))
{
mysql_unlock_read_tables(thd, lock);// Don't free join->lock
lock=0;
// TODO: unlock tables even if the join isn't top level select in the tree
if (select_lex == (thd->lex->unit.fake_select_lex ?
thd->lex->unit.fake_select_lex : &thd->lex->select_lex))
{
mysql_unlock_read_tables(thd, lock); // Don't free join->lock
lock=0;
}
}
if (full)
{
group_fields.delete_elements();