mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#50624: crash in check_table_access during call procedure
This bug is just one facet of stored routines not being able to detect changes in meta-data (WL#4179). This particular problem can be triggered within a single session due to the improper management of the pre-locking list if the view is expanded after the pre-locking list is calculated. Since the overall solution for the meta-data detection issue is planned for a later release, for now a workaround is used to fix this particular aspect that only involves a single session. The workaround is to flush the thread-local stored routine cache every time a view is created or modified, causing locally cached routines to be re-evaluated upon invocation. mysql-test/r/sp-bugs.result: Add test case result for Bug#50624. mysql-test/t/sp-bugs.test: Add test case for Bug#50624. sql/sp_cache.cc: Update function description. sql/sql_view.cc: Invalidate the SP cache if a view is being created or modified.
This commit is contained in:
@ -400,17 +400,14 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
|
||||
DBUG_ASSERT(!lex->proc_list.first && !lex->result &&
|
||||
!lex->param_list.elements);
|
||||
|
||||
if (mode != VIEW_CREATE_NEW)
|
||||
if (mode == VIEW_ALTER && fill_defined_view_parts(thd, view))
|
||||
{
|
||||
if (mode == VIEW_ALTER &&
|
||||
fill_defined_view_parts(thd, view))
|
||||
{
|
||||
res= TRUE;
|
||||
goto err;
|
||||
}
|
||||
sp_cache_invalidate();
|
||||
res= TRUE;
|
||||
goto err;
|
||||
}
|
||||
|
||||
sp_cache_invalidate();
|
||||
|
||||
if (!lex->definer)
|
||||
{
|
||||
/*
|
||||
|
Reference in New Issue
Block a user