summaryrefslogtreecommitdiff
path: root/sql/sp_cache.cc
diff options
context:
space:
mode:
authorKonstantin Osipov <konstantin@mysql.com>2008-07-03 23:41:22 +0400
committerKonstantin Osipov <konstantin@mysql.com>2008-07-03 23:41:22 +0400
commit7b8bfb2a93fbcaf1b43c343a0ab0c886da1d8f96 (patch)
treeacd04510c1120addfb7290222a2147d86665993f /sql/sp_cache.cc
parentb6b6d98fff188128b35e69da4679d0f0bb48239f (diff)
downloadmariadb-git-7b8bfb2a93fbcaf1b43c343a0ab0c886da1d8f96.tar.gz
A fix for
Bug#12093 "SP not found on second PS execution if another thread drops other SP in between" and Bug#21294 "executing a prepared statement that executes a stored function which was recreat" Stored functions are resolved at prepared statement prepare only. If someone flushes the stored functions cache between prepare and execute, execution fails. The fix is to detect the situation of the cache flush and automatically reprepare the prepared statement after it. mysql-test/r/ps_ddl.result: Update results (Bug#12093 and Bug#21294, the test cases are already in the source tree). mysql-test/r/ps_ddl1.result: Update results (Bug#12093 and Bug#21294, the test cases are already in the source tree). mysql-test/r/sp-error.result: Update results (Bug#12093 and Bug#21294, the test cases are already in the source tree). mysql-test/t/ps_ddl.test: Modify the test to not expect an error where there is no error any more (Bug#12093, Bug#21294). mysql-test/t/ps_ddl1.test: Modify the test to not expect an error where there is no error any more (Bug#12093, Bug#21294). mysql-test/t/sp-error.test: Modify the test to not expect an error where there is no error any more (Bug#12093, Bug#21294). sql/sp_cache.cc: Implement sp_cache_version() -- returns the current version of a stored routines cache. sql/sp_cache.h: Declare sp_cache_version(). sql/sql_prepare.cc: Keep track of stored functions cache version, and invalidate the statement if it changed between prepared statement prepare and execute (and the statement actually uses stored routines).
Diffstat (limited to 'sql/sp_cache.cc')
-rw-r--r--sql/sp_cache.cc13
1 files changed, 13 insertions, 0 deletions
diff --git a/sql/sp_cache.cc b/sql/sp_cache.cc
index cc6ba9ef1d0..64898915b7e 100644
--- a/sql/sp_cache.cc
+++ b/sql/sp_cache.cc
@@ -210,6 +210,19 @@ void sp_cache_flush_obsolete(sp_cache **cp)
}
+/**
+ Return the current version of the cache.
+*/
+
+ulong sp_cache_version(sp_cache **cp)
+{
+ sp_cache *c= *cp;
+ if (c)
+ return c->version;
+ return 0;
+}
+
+
/*************************************************************************
Internal functions
*************************************************************************/