diff options
Diffstat (limited to 'src/backend/utils/catcache.h')
-rw-r--r-- | src/backend/utils/catcache.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/backend/utils/catcache.h b/src/backend/utils/catcache.h new file mode 100644 index 00000000000..daecf2ff30a --- /dev/null +++ b/src/backend/utils/catcache.h @@ -0,0 +1,85 @@ +/*------------------------------------------------------------------------- + * + * catcache.h-- + * Low-level catalog cache definitions. + * + * + * Copyright (c) 1994, Regents of the University of California + * + * $Id: catcache.h,v 1.1.1.1 1996/07/09 06:22:01 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef CATCACHE_H +#define CATCACHE_H + +/* #define CACHEDEBUG turns DEBUG elogs on */ + +#include "postgres.h" + +#include "access/skey.h" +#include "access/htup.h" +#include "utils/rel.h" +#include "nodes/memnodes.h" +#include "lib/dllist.h" + +/* + * struct catctup: tuples in the cache. + * struct catcache: information for managing a cache. + */ + +typedef struct catctup { + HeapTuple ct_tup; /* A pointer to a tuple */ + Dlelem *ct_node; /* points to LRU list is the CatCTup is in the cache, + else, points to the cache if the CatCTup is in + LRU list */ +} CatCTup; + +/* voodoo constants */ +#define NCCBUCK 500 /* CatCache buckets*/ +#define MAXTUP 300 /* Maximum # of tuples cached per cache */ + +typedef struct catcache { + Oid relationId; + Oid indexId; + char *cc_relname; /* relation name for defered open */ + char *cc_indname; /* index name for defered open */ + HeapTuple (*cc_iscanfunc)(); /* index scanfunction */ + TupleDesc cc_tupdesc; /* tuple descriptor from reldesc */ + int id; /* XXX could be improved -hirohama */ + short cc_ntup; /* # of tuples in this cache */ + short cc_maxtup; /* max # of tuples allowed (LRU)*/ + short cc_nkeys; + short cc_size; + short cc_key[4]; + short cc_klen[4]; + ScanKeyData cc_skey[4]; + struct catcache *cc_next; + Dllist *cc_lrulist; /* LRU list, most recent first */ + Dllist *cc_cache[NCCBUCK+1]; +} CatCache; + +#define InvalidCatalogCacheId (-1) + +extern struct catcache *Caches; +extern GlobalMemory CacheCxt; + +extern void CatalogCacheInitializeCache(struct catcache *cache, + Relation relation); +extern void CatalogCacheSetId(CatCache *cacheInOutP, int id); +extern long comphash(long l, char *v); +extern Index CatalogCacheComputeHashIndex(struct catcache *cacheInP); +extern Index CatalogCacheComputeTupleHashIndex(struct catcache *cacheInOutP, + Relation relation, HeapTuple tuple); +extern void CatCacheRemoveCTup(CatCache *cache, Dlelem *e); +extern void CatalogCacheIdInvalidate(int cacheId, Index hashIndex, + ItemPointer pointer); +extern void ResetSystemCache(void); +extern CatCache *InitSysCache(char *relname, char *indname, int id, int nkeys, + int key[], HeapTuple (*iScanfuncP)()); +extern HeapTuple SearchSysCache(struct catcache *cache, Datum v1, Datum v2, + Datum v3, Datum v4); +extern void RelationInvalidateCatalogCacheTuple(Relation relation, + HeapTuple tuple, void (*function)()); + +#endif /* CATCACHE_H */ |