diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index cebf88464cf..7bcfaf8bdc3 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -1923,3 +1923,20 @@ ERROR HY000: Field of view 'test.v2' underlying table doesn't have a default val set sql_mode=default; drop view v2,v1; drop table t1; +CREATE TABLE t1 (s1 int, s2 int); +INSERT INTO t1 VALUES (1,2); +CREATE VIEW v1 AS SELECT s2 AS s1, s1 AS s2 FROM t1; +SELECT * FROM v1; +s1 s2 +2 1 +CREATE PROCEDURE p1 () SELECT * FROM v1; +CALL p1(); +s1 s2 +2 1 +ALTER VIEW v1 AS SELECT s1 AS s1, s2 AS s2 FROM t1; +CALL p1(); +s1 s2 +1 2 +DROP PROCEDURE p1; +DROP VIEW v1; +DROP TABLE t1; diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index f3e32754821..6b6b3d8a00f 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -1761,3 +1761,20 @@ INSERT INTO v2 (vcol1) VALUES(12); set sql_mode=default; drop view v2,v1; drop table t1; + +# +# Test for bug #6120: SP cache to be invalidated when altering a view +# + +CREATE TABLE t1 (s1 int, s2 int); +INSERT INTO t1 VALUES (1,2); +CREATE VIEW v1 AS SELECT s2 AS s1, s1 AS s2 FROM t1; +SELECT * FROM v1; +CREATE PROCEDURE p1 () SELECT * FROM v1; +CALL p1(); +ALTER VIEW v1 AS SELECT s1 AS s1, s2 AS s2 FROM t1; +CALL p1(); + +DROP PROCEDURE p1; +DROP VIEW v1; +DROP TABLE t1; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index c8abee1e7dc..d74b96de2cd 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -20,6 +20,7 @@ #include "parse_file.h" #include "sp.h" #include "sp_head.h" +#include "sp_cache.h" #define MD5_BUFF_LENGTH 33 @@ -141,6 +142,9 @@ bool mysql_create_view(THD *thd, goto err; } + if (mode != VIEW_CREATE_NEW) + sp_cache_invalidate(); + #ifndef NO_EMBEDDED_ACCESS_CHECKS /* Privilege check for view creation: