summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorAlexander Nozdrin <alexander.nozdrin@oracle.com>2011-03-10 11:07:57 +0300
committerAlexander Nozdrin <alexander.nozdrin@oracle.com>2011-03-10 11:07:57 +0300
commit5653a71d3ec08e64098b430fcd7def790e249fa3 (patch)
tree5fa3a4d25f85e9fca1dd6180886d6e2bd4399afb /mysql-test
parent0b7e6f81afe24f4734b3d8ce5d85411609f8d3a0 (diff)
downloadmariadb-git-5653a71d3ec08e64098b430fcd7def790e249fa3.tar.gz
Patch for Bug#11765684 (58674: SP-cache does not detect changes in
pre-locking list caused by triggers). The thing is that CREATE TRIGGER / DROP TRIGGER may actually change pre-locking list of (some) stored routines. The SP-cache does not detect such changes. Thus if sp_head-instance is cached in SP-cache, subsequent executions of the cached sp_head will use inaccurate pre-locking list. The patch is to invalidate SP-cache on CREATE TRIGGER / DROP TRIGGER.
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/sp.result30
-rw-r--r--mysql-test/r/trigger.result1
-rw-r--r--mysql-test/t/sp.test41
-rw-r--r--mysql-test/t/trigger.test4
4 files changed, 71 insertions, 5 deletions
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result
index 243bfb6c07d..f9b338dd414 100644
--- a/mysql-test/r/sp.result
+++ b/mysql-test/r/sp.result
@@ -7452,4 +7452,34 @@ c1
# Cleanup
drop table t1;
drop procedure p1;
+
+# --
+# -- Bug 11765684 - 58674: SP-cache does not detect changes in
+# -- pre-locking list caused by triggers
+# ---
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+DROP TABLE IF EXISTS t3;
+DROP PROCEDURE IF EXISTS p1;
+CREATE TABLE t1(a INT);
+CREATE TABLE t2(a INT);
+CREATE TABLE t3(a INT);
+CREATE PROCEDURE p1()
+INSERT INTO t1(a) VALUES (1);
+
+CREATE TRIGGER t1_ai AFTER INSERT ON t1
+FOR EACH ROW
+INSERT INTO t2(a) VALUES (new.a);
+
+CALL p1();
+
+CREATE TRIGGER t1_bi BEFORE INSERT ON t1
+FOR EACH ROW
+INSERT INTO t3(a) VALUES (new.a);
+
+CALL p1();
+
+DROP TABLE t1, t2, t3;
+DROP PROCEDURE p1;
+
# End of 5.5 test
diff --git a/mysql-test/r/trigger.result b/mysql-test/r/trigger.result
index b24c5b87fa0..11e0d7313b7 100644
--- a/mysql-test/r/trigger.result
+++ b/mysql-test/r/trigger.result
@@ -821,7 +821,6 @@ drop trigger t1_bi;
create trigger t1_bi after insert on t1 for each row insert into t3 values (new.id);
execute stmt1;
call p1();
-ERROR 42S02: Table 'test.t3' doesn't exist
deallocate prepare stmt1;
drop procedure p1;
drop table t1, t2, t3;
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test
index 11edeaf9811..1ed11c50ba8 100644
--- a/mysql-test/t/sp.test
+++ b/mysql-test/t/sp.test
@@ -8713,4 +8713,45 @@ call p1(3, 2);
drop table t1;
drop procedure p1;
+--echo
+--echo # --
+--echo # -- Bug 11765684 - 58674: SP-cache does not detect changes in
+--echo # -- pre-locking list caused by triggers
+--echo # ---
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+DROP TABLE IF EXISTS t3;
+DROP PROCEDURE IF EXISTS p1;
+--enable_warnings
+
+CREATE TABLE t1(a INT);
+CREATE TABLE t2(a INT);
+CREATE TABLE t3(a INT);
+
+CREATE PROCEDURE p1()
+ INSERT INTO t1(a) VALUES (1);
+
+--echo
+CREATE TRIGGER t1_ai AFTER INSERT ON t1
+ FOR EACH ROW
+ INSERT INTO t2(a) VALUES (new.a);
+
+--echo
+CALL p1();
+
+--echo
+CREATE TRIGGER t1_bi BEFORE INSERT ON t1
+ FOR EACH ROW
+ INSERT INTO t3(a) VALUES (new.a);
+
+--echo
+CALL p1();
+
+--echo
+DROP TABLE t1, t2, t3;
+DROP PROCEDURE p1;
+--echo
+
--echo # End of 5.5 test
diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test
index 3e4c3660f88..e5039c3ea23 100644
--- a/mysql-test/t/trigger.test
+++ b/mysql-test/t/trigger.test
@@ -998,10 +998,6 @@ call p1();
drop trigger t1_bi;
create trigger t1_bi after insert on t1 for each row insert into t3 values (new.id);
execute stmt1;
-# Until we implement proper mechanism for invalidation of SP statements
-# invoked whenever a table used in SP changes, this statement will fail with
-# 'Table ... does not exist' error.
---error ER_NO_SUCH_TABLE
call p1();
deallocate prepare stmt1;
drop procedure p1;