/*------------------------------------------------------------------------- * * 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 */