summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorKonstantin Osipov <kostja@sun.com>2009-12-03 14:47:05 +0300
committerKonstantin Osipov <kostja@sun.com>2009-12-03 14:47:05 +0300
commit37edcc7e26ba924fd516a85c855e6d37859e6d47 (patch)
tree9704773c054e8f824821d0386623b71e6693c306 /sql
parent0f9c02d49a52c9faacb328649f9eab23b2d93a6b (diff)
downloadmariadb-git-37edcc7e26ba924fd516a85c855e6d37859e6d47.tar.gz
Backport of:
---------------------------------------------------------- revno: 2630.2.7 committer: Konstantin Osipov <konstantin@mysql.com> branch nick: mysql-6.0-runtime timestamp: Wed 2008-06-04 15:18:52 +0400 message: Fix a code regression (not observable externally) that I introduced in the fix for Bug#26141 (backporting as part of all patches related to WL#3726)
Diffstat (limited to 'sql')
-rw-r--r--sql/sp.cc27
1 files changed, 18 insertions, 9 deletions
diff --git a/sql/sp.cc b/sql/sp.cc
index f6bfba71726..e6999b480f2 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -1693,6 +1693,12 @@ sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex,
int type= rt->key.str[0];
sp_head *sp;
+ /*
+ Triggers can't happen here: their bodies are always processed
+ in sp_cache_routines_and_add_tables_for_triggers().
+ */
+ DBUG_ASSERT(type == TYPE_ENUM_FUNCTION || type == TYPE_ENUM_PROCEDURE);
+
if (!(sp= sp_cache_lookup((type == TYPE_ENUM_FUNCTION ?
&thd->sp_func_cache : &thd->sp_proc_cache),
&name)))
@@ -1836,11 +1842,6 @@ int
sp_cache_routines_and_add_tables_for_triggers(THD *thd, LEX *lex,
TABLE_LIST *table)
{
- int ret= 0;
-
- Sroutine_hash_entry **last_cached_routine_ptr=
- (Sroutine_hash_entry **)lex->sroutines_list.next;
-
if (static_cast<int>(table->lock_type) >=
static_cast<int>(TL_WRITE_ALLOW_WRITE))
{
@@ -1857,21 +1858,29 @@ sp_cache_routines_and_add_tables_for_triggers(THD *thd, LEX *lex,
add_used_routine(lex, thd->stmt_arena, &trigger->m_sroutines_key,
table->belong_to_view))
{
+ int ret;
+ /* Sic: excludes the trigger key from processing */
+ Sroutine_hash_entry **last_cached_routine_ptr=
+ (Sroutine_hash_entry **)lex->sroutines_list.next;
+
trigger->add_used_tables_to_table_list(thd, &lex->query_tables_last,
table->belong_to_view);
trigger->propagate_attributes(lex);
sp_update_stmt_used_routines(thd, lex,
&trigger->m_sroutines,
table->belong_to_view);
+
+ ret= sp_cache_routines_and_add_tables_aux(thd, lex,
+ *last_cached_routine_ptr,
+ FALSE);
+ if (ret)
+ return ret;
}
}
}
}
}
- ret= sp_cache_routines_and_add_tables_aux(thd, lex,
- *last_cached_routine_ptr,
- FALSE);
- return ret;
+ return 0;
}