catcache.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * catcache.h
  4.  *   Low-level catalog cache definitions.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: catcache.h,v 1.15 1999/06/04 02:19:44 tgl Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef CATCACHE_H
  14. #define CATCACHE_H
  15. /* #define CACHEDEBUG  turns DEBUG elogs on */
  16. #include <access/htup.h>
  17. #include <lib/dllist.h>
  18. #include <nodes/memnodes.h>
  19. #include <utils/rel.h>
  20. /*
  21.  * struct catctup: tuples in the cache.
  22.  * struct catcache: information for managing a cache.
  23.  */
  24. typedef struct catctup
  25. {
  26. HeapTuple ct_tup; /* A pointer to a tuple */
  27. /* Each tuple in the cache has two catctup items, one in the LRU list
  28.  * and one in the hashbucket list for its hash value.  ct_node in each
  29.  * one points to the other one.
  30.  */
  31. Dlelem    *ct_node; /* the other catctup for this tuple */
  32. } CatCTup;
  33. /* voodoo constants */
  34. #define NCCBUCK 500 /* CatCache buckets */
  35. #define MAXTUP 300 /* Maximum # of tuples cached per cache */
  36. typedef struct catcache
  37. {
  38. Oid relationId;
  39. Oid indexId;
  40. char    *cc_relname; /* relation name for defered open */
  41. char    *cc_indname; /* index name for defered open */
  42. HeapTuple (*cc_iscanfunc) (); /* index scanfunction */
  43. TupleDesc cc_tupdesc; /* tuple descriptor from reldesc */
  44. int id; /* XXX could be improved -hirohama */
  45. bool busy; /* for detecting recursive lookups */
  46. short cc_ntup; /* # of tuples in this cache */
  47. short cc_maxtup; /* max # of tuples allowed (LRU) */
  48. short cc_nkeys;
  49. short cc_size;
  50. short cc_key[4];
  51. short cc_klen[4];
  52. ScanKeyData cc_skey[4];
  53. struct catcache *cc_next;
  54. Dllist    *cc_lrulist; /* LRU list, most recent first */
  55. Dllist    *cc_cache[NCCBUCK + 1]; /* hash buckets */
  56. } CatCache;
  57. #define InvalidCatalogCacheId (-1)
  58. extern GlobalMemory CacheCxt;
  59. extern void CatalogCacheIdInvalidate(int cacheId, Index hashIndex,
  60.  ItemPointer pointer);
  61. extern void ResetSystemCache(void);
  62. extern void SystemCacheRelationFlushed(Oid relId);
  63. extern CatCache *InitSysCache(char *relname, char *indname, int id, int nkeys,
  64.  int *key, HeapTuple (*iScanfuncP) ());
  65. extern HeapTuple SearchSysCache(struct catcache * cache, Datum v1, Datum v2,
  66.    Datum v3, Datum v4);
  67. extern void RelationInvalidateCatalogCacheTuple(Relation relation,
  68. HeapTuple tuple, void (*function) ());
  69. #endif  /* CATCACHE_H */