mirror of
https://github.com/MariaDB/server.git
synced 2026-05-04 14:15:33 +02:00
Fixed LP bug #824463.
When merging a view / derived table the function SELECT_LEX::merge_subquery incorrectly updated the list SELECT_LEX::leaf_tables. Erroneously it appended the leaf_tables list of the merged object L and then removed the reference to the merged object T from the SELECT_LEX::leaf_tables list. A correct implementation should insert the list L into the SELECT_LEX::leaf_tables list in place of the element of the list that refers to T. The bug could lead to wrong results or even crashes for queries with nested outer joins over views / derived tables.
This commit is contained in:
parent
fb135f7ee5
commit
be03fe9c29
5 changed files with 260 additions and 26 deletions
|
|
@ -888,7 +888,7 @@ public:
|
|||
bool handle_derived(struct st_lex *lex, uint phases);
|
||||
void append_table_to_list(TABLE_LIST *TABLE_LIST::*link, TABLE_LIST *table);
|
||||
bool get_free_table_map(table_map *map, uint *tablenr);
|
||||
void remove_table_from_list(TABLE_LIST *table);
|
||||
void replace_leaf_table(TABLE_LIST *table, List<TABLE_LIST> &tbl_list);
|
||||
void remap_tables(TABLE_LIST *derived, table_map map,
|
||||
uint tablenr, st_select_lex *parent_lex);
|
||||
bool merge_subquery(THD *thd, TABLE_LIST *derived, st_select_lex *subq_lex,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue