Commit 4c197d99 authored by unknown's avatar unknown

Now when we create or drop trigger we will open only subject table and not

all tables suggested by prelocking algorithm.
Added test for bug #11889 "Server crashes when dropping trigger using stored
routine" (which was fixed by previous patch).


mysql-test/r/trigger.result:
  Since we are using open_ltable() now to open table for trigger creation, code
  for error when we try to create trigger on view has changed to equivalent one.
  Added test for bug #11889 "Server crashes when dropping trigger using stored
  routine".
mysql-test/t/trigger.test:
  Since we are using open_ltable() now to open table for trigger creation, code
  for error when we try to create trigger on view has changed to equivalent one.
  Added test for bug #11889 "Server crashes when dropping trigger using stored
  routine".
sql/sql_trigger.cc:
  mysql_create_or_drop_trigger():
    It is better to open only table for which we are going to create or drop
    trigger with open_ltable() since we don't really need working prelocking
    in this case.
parent 7001961e
......@@ -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;
......@@ -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;
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment