mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix the bug introduced with the push of the fix for bug#18326: Do not
lock table for writing during prepare of statement. When single call open_normal_and_derived_tables() was used, we never set table_count to the right value. This patch reverts the part of the old code that does open_tables() (and sets table_count), then checks if table_list->multitable_view is set (and returns if so, using table_count value), and only then it does mysql_handle_derived().
This commit is contained in:
@ -1142,7 +1142,7 @@ static int mysql_test_update(Prepared_statement *stmt,
|
|||||||
DBUG_ENTER("mysql_test_update");
|
DBUG_ENTER("mysql_test_update");
|
||||||
|
|
||||||
if (update_precheck(thd, table_list) ||
|
if (update_precheck(thd, table_list) ||
|
||||||
open_normal_and_derived_tables(thd, table_list, 0))
|
open_tables(thd, &table_list, &table_count, 0))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (table_list->multitable_view)
|
if (table_list->multitable_view)
|
||||||
@ -1155,6 +1155,13 @@ static int mysql_test_update(Prepared_statement *stmt,
|
|||||||
DBUG_RETURN(2);
|
DBUG_RETURN(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
thd->fill_derived_tables() is false here for sure (because it is
|
||||||
|
preparation of PS, so we even do not check it).
|
||||||
|
*/
|
||||||
|
if (mysql_handle_derived(thd->lex, &mysql_derived_prepare))
|
||||||
|
goto error;
|
||||||
|
|
||||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||||
/* TABLE_LIST contain right privilages request */
|
/* TABLE_LIST contain right privilages request */
|
||||||
want_privilege= table_list->grant.want_privilege;
|
want_privilege= table_list->grant.want_privilege;
|
||||||
|
Reference in New Issue
Block a user