diff options
author | unknown <pem@mysql.comhem.se> | 2003-10-21 12:08:35 +0200 |
---|---|---|
committer | unknown <pem@mysql.comhem.se> | 2003-10-21 12:08:35 +0200 |
commit | 562a04d593ca9a179b851e1d71d30e764e55f7ad (patch) | |
tree | 2a69a7aa7527c9093f6156dee7a663e6404c913f /sql/sp_cache.h | |
parent | 2b1dc5f35d5bf773378a36a14399987635be7127 (diff) | |
download | mariadb-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.h | 32 |
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; |