summaryrefslogtreecommitdiff
path: root/sql/sp_cache.h
diff options
context:
space:
mode:
authorunknown <pem@mysql.comhem.se>2003-10-21 12:08:35 +0200
committerunknown <pem@mysql.comhem.se>2003-10-21 12:08:35 +0200
commit562a04d593ca9a179b851e1d71d30e764e55f7ad (patch)
tree2a69a7aa7527c9093f6156dee7a663e6404c913f /sql/sp_cache.h
parent2b1dc5f35d5bf773378a36a14399987635be7127 (diff)
downloadmariadb-git-562a04d593ca9a179b851e1d71d30e764e55f7ad.tar.gz
WL#1265: Fix proper ALTER/DROP support in the SP cache.
New sp_cache C API. When an SP is dropped, old caches (in other threads) become invalid and are cleared. Also, the caches in THD are only created on demand. Docs/sp-imp-spec.txt: Brough the SP cache docs up-to-date. sql/mysqld.cc: Initialize SP cache. sql/sp.cc: New C API for SP cache. sql/sp_cache.cc: New C API for sp_cache. The class sp_cache is still used, but not directly. The C functions makes takes care of updating caches when SPs are dropped. (This is done in the simplest possible way, by simply detecting drops and then clear all old caches.) The API is also designed so that the sp_cache is created on demand. sql/sp_cache.h: New C API for sp_cache. The class sp_cache is still used, but not directly. The C functions makes takes care of updating caches when SPs are dropped. The API is also designed so that the sp_cache is created on demand. sql/sql_class.cc: The new sp_cache API creates the caches on demand, to avoid allocating it when it's not needed.
Diffstat (limited to 'sql/sp_cache.h')
-rw-r--r--sql/sp_cache.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/sql/sp_cache.h b/sql/sp_cache.h
index 5e7825d70fc..f5b330f6755 100644
--- a/sql/sp_cache.h
+++ b/sql/sp_cache.h
@@ -23,11 +23,36 @@
#endif
class sp_head;
+class sp_cache;
+
+/* Initialize the SP caching once at startup */
+void sp_cache_init();
+
+/* Clear the cache *cp and set *cp to NULL */
+void sp_cache_clear(sp_cache **cp);
+
+/* Insert an SP to cache. If 'cp' points to NULL, it's set to a new cache */
+void sp_cache_insert(sp_cache **cp, sp_head *sp);
+
+/* Lookup an SP in cache */
+sp_head *sp_cache_lookup(sp_cache **cp, char *name, uint namelen);
+
+/* Remove an SP from cache */
+void sp_cache_remove(sp_cache **cp, sp_head *sp);
+
+
+/*
+ *
+ * The cache class. Don't use this directly, use the C API above
+ *
+ */
class sp_cache
{
public:
+ ulong version;
+
sp_cache();
~sp_cache();
@@ -56,6 +81,13 @@ public:
hash_delete(&m_hashtable, (byte *)sp);
}
+ inline void
+ remove_all()
+ {
+ cleanup();
+ init();
+ }
+
private:
HASH m_hashtable;