mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Backport of:
---------------------------------------------------------- revno: 2617.69.24 committer: Konstantin Osipov <kostja@sun.com> branch nick: 5.4-42546 timestamp: Fri 2009-08-14 19:22:05 +0400 message: A pre-requisite for a fix for Bug#42546 "Backup: RESTORE fails, thinking it finds an existing table" Back-port from WL 148 "Foreign keys" feature tree a patch that introduced Prelocking_strategy class -- a way to parameterize open_tables() behaviour, implemented by Dmitry Lenev. (Part of WL#4284).
This commit is contained in:
@ -19,6 +19,7 @@
|
||||
#include "sp_head.h"
|
||||
#include "sql_trigger.h"
|
||||
#include "parse_file.h"
|
||||
#include "sp.h"
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
@ -2017,6 +2018,57 @@ bool Table_triggers_list::process_triggers(THD *thd,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Add triggers for table to the set of routines used by statement.
|
||||
Add tables used by them to statement table list. Do the same for
|
||||
routines used by triggers.
|
||||
|
||||
@param thd Thread context.
|
||||
@param prelocking_ctx Prelocking context of the statement.
|
||||
@param table_list Table list element for table with trigger.
|
||||
|
||||
@retval FALSE Success.
|
||||
@retval TRUE Failure.
|
||||
*/
|
||||
|
||||
bool
|
||||
Table_triggers_list::
|
||||
add_tables_and_routines_for_triggers(THD *thd,
|
||||
Query_tables_list *prelocking_ctx,
|
||||
TABLE_LIST *table_list)
|
||||
{
|
||||
DBUG_ASSERT(static_cast<int>(table_list->lock_type) >=
|
||||
static_cast<int>(TL_WRITE_ALLOW_WRITE));
|
||||
|
||||
for (int i= 0; i < (int)TRG_EVENT_MAX; i++)
|
||||
{
|
||||
if (table_list->trg_event_map &
|
||||
static_cast<uint8>(1 << static_cast<int>(i)))
|
||||
{
|
||||
for (int j= 0; j < (int)TRG_ACTION_MAX; j++)
|
||||
{
|
||||
/* We can have only one trigger per action type currently */
|
||||
sp_head *trigger= table_list->table->triggers->bodies[i][j];
|
||||
|
||||
if (trigger && sp_add_used_routine(prelocking_ctx, thd->stmt_arena,
|
||||
&trigger->m_sroutines_key,
|
||||
table_list->belong_to_view))
|
||||
{
|
||||
trigger->add_used_tables_to_table_list(thd,
|
||||
&prelocking_ctx->query_tables_last,
|
||||
table_list->belong_to_view);
|
||||
sp_update_stmt_used_routines(thd, prelocking_ctx,
|
||||
&trigger->m_sroutines,
|
||||
table_list->belong_to_view);
|
||||
trigger->propagate_attributes(prelocking_ctx);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Mark fields of subject table which we read/set in its triggers
|
||||
as such.
|
||||
|
Reference in New Issue
Block a user