aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/catcache.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/catcache.h')
-rw-r--r--src/backend/utils/catcache.h85
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 */