mirror of
https://github.com/MariaDB/server.git
synced 2026-05-04 06:05:32 +02:00
Fixed LP bug #794901.
Also: 1. simplified the code of the function mysql_derived_merge_for_insert. 2. moved merge of views/dt for multi-update/delete to the prepare stage. 3. the list of the references to the candidates for semi-join now is allocated in the statement memory.
This commit is contained in:
parent
6e5413853e
commit
d37465a9cc
13 changed files with 154 additions and 137 deletions
|
|
@ -248,6 +248,7 @@ int mysql_update(THD *thd,
|
|||
DBUG_RETURN(1);
|
||||
close_tables_for_reopen(thd, &table_list);
|
||||
}
|
||||
|
||||
if (table_list->handle_derived(thd->lex, DT_MERGE_FOR_INSERT))
|
||||
DBUG_RETURN(1);
|
||||
if (table_list->handle_derived(thd->lex, DT_PREPARE))
|
||||
|
|
@ -1037,10 +1038,10 @@ reopen_tables:
|
|||
second time, but this call will do nothing (there are check for second
|
||||
call in setup_tables()).
|
||||
*/
|
||||
|
||||
//We need to merge for insert prior to prepare.
|
||||
if (mysql_handle_derived(lex, DT_MERGE_FOR_INSERT))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (mysql_handle_derived(lex, DT_PREPARE))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
|
|
@ -1048,7 +1049,10 @@ reopen_tables:
|
|||
&lex->select_lex.top_join_list,
|
||||
table_list,
|
||||
lex->select_lex.leaf_tables, FALSE,
|
||||
UPDATE_ACL, SELECT_ACL, TRUE))
|
||||
UPDATE_ACL, SELECT_ACL, FALSE))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (lex->select_lex.handle_derived(thd->lex, DT_MERGE))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (setup_fields_with_no_wrap(thd, 0, *fields, MARK_COLUMNS_WRITE, 0, 0))
|
||||
|
|
@ -1334,13 +1338,6 @@ int multi_update::prepare(List<Item> ¬_used_values,
|
|||
thd->cuted_fields=0L;
|
||||
thd_proc_info(thd, "updating main table");
|
||||
|
||||
SELECT_LEX *select_lex= lex_unit->first_select();
|
||||
if (select_lex->first_cond_optimization)
|
||||
{
|
||||
if (select_lex->handle_derived(thd->lex, DT_MERGE))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
tables_to_update= get_table_map(fields);
|
||||
|
||||
if (!tables_to_update)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue