diff options
-rw-r--r-- | mysql-test/r/trigger.result | 3 | ||||
-rw-r--r-- | mysql-test/t/trigger.test | 6 | ||||
-rw-r--r-- | sql/sql_trigger.cc | 7 |
3 files changed, 11 insertions, 5 deletions
diff --git a/mysql-test/r/trigger.result b/mysql-test/r/trigger.result index 60aa358a9f1..efd09ba08fc 100644 --- a/mysql-test/r/trigger.result +++ b/mysql-test/r/trigger.result @@ -297,7 +297,7 @@ drop trigger t1.trg; ERROR HY000: Trigger does not exist create view v1 as select * from t1; create trigger trg before insert on v1 for each row set @a:=1; -ERROR HY000: Trigger's 'v1' is view or temporary table +ERROR HY000: 'test.v1' is not BASE TABLE drop view v1; drop table t1; create temporary table t1 (i int); @@ -578,4 +578,5 @@ create trigger t1_bu before update on t1 for each row set new.col1= bug5893(); drop function bug5893; update t1 set col2 = 4; ERROR 42000: FUNCTION test.bug5893 does not exist +drop trigger t1.t1_bu; drop table t1; diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test index 39638cc437e..8a27636ed84 100644 --- a/mysql-test/t/trigger.test +++ b/mysql-test/t/trigger.test @@ -317,7 +317,7 @@ drop trigger t1.trg; drop trigger t1.trg; create view v1 as select * from t1; ---error 1361 +--error 1347 create trigger trg before insert on v1 for each row set @a:=1; drop view v1; @@ -576,6 +576,8 @@ drop table t1, t2; # Test for bug #5893 "Triggers with dropped functions cause crashes" # Appropriate error should be reported instead of crash. +# Also test for bug #11889 "Server crashes when dropping trigger +# using stored routine". --disable_warnings drop function if exists bug5893; --enable_warnings @@ -586,4 +588,6 @@ create trigger t1_bu before update on t1 for each row set new.col1= bug5893(); drop function bug5893; --error 1305 update t1 set col2 = 4; +# This should not crash server too. +drop trigger t1.t1_bu; drop table t1; diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index f058c306d42..fd79fc8b878 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -69,7 +69,10 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create) But do we want this ? */ - if (open_and_lock_tables(thd, tables)) + /* We should have only one table in table list. */ + DBUG_ASSERT(tables->next_global == 0); + + if (!(table= open_ltable(thd, tables, tables->lock_type))) DBUG_RETURN(TRUE); /* @@ -80,8 +83,6 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create) if (check_global_access(thd, SUPER_ACL)) DBUG_RETURN(TRUE); - table= tables->table; - /* We do not allow creation of triggers on views or temporary tables. We have to do this check here and not in |