mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
- don't call JOIN::join_free(1) twice for every join in JOIN::cleanup().
The reason it happened was that both, JOIN::cleanup() and JOIN::join_free(), went over all nested joins and called cleanup/join_free for them. For that: - split recursive and non-recursive parts of JOIN::cleanup() and JOIN::join_free() - rename JOIN::cleanup to JOIN::destroy, as it actually destroys its argument - move the recursive part of JOIN::cleanup to st_select_lex::cleanup - move the non-recursive part of JOIN::join_free to the introduced method JOIN::cleanup().
This commit is contained in:
@ -642,6 +642,11 @@ public:
|
||||
static void print_order(String *str, ORDER *order);
|
||||
void print_limit(THD *thd, String *str);
|
||||
void fix_prepare_information(THD *thd, Item **conds);
|
||||
/*
|
||||
Destroy the used execution plan (JOIN) of this subtree (this
|
||||
SELECT_LEX and all nested SELECT_LEXes and SELECT_LEX_UNITs).
|
||||
*/
|
||||
bool cleanup();
|
||||
};
|
||||
typedef class st_select_lex SELECT_LEX;
|
||||
|
||||
|
Reference in New Issue
Block a user