text: /*-------------------------------------------------------------------------
   *
   * relcache.h
   *	  Relation descriptor cache definitions.
   *
   *
   * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * $PostgreSQL: pgsql/src/include/utils/relcache.h,v 1.56 2006/11/05 23:40:31 tgl Exp $
   *
   *-------------------------------------------------------------------------
   */
  #ifndef RELCACHE_H
  #define RELCACHE_H
  
  #include "utils/rel.h"
  
  /*
   * Routines to open (lookup) and close a relcache entry
   */
  extern Relation RelationIdGetRelation(Oid relationId);
  extern void RelationClose(Relation relation);
  
  /*
   * Routines to compute/retrieve additional cached information
   */
  extern List *RelationGetIndexList(Relation relation);
  extern Oid	RelationGetOidIndex(Relation relation);
  extern List *RelationGetIndexExpressions(Relation relation);
  extern List *RelationGetIndexPredicate(Relation relation);
  
  extern void RelationSetIndexList(Relation relation,
  					 List *indexIds, Oid oidIndex);
  
  extern void RelationInitIndexAccessInfo(Relation relation);
  
  /*
   * Routines for backend startup
   */
  extern void RelationCacheInitialize(void);
  extern void RelationCacheInitializePhase2(void);
  
  /*
   * Routine to create a relcache entry for an about-to-be-created relation
   */
  extern Relation RelationBuildLocalRelation(const char *relname,
  						   Oid relnamespace,
  						   TupleDesc tupDesc,
  						   Oid relid,
  						   Oid reltablespace,
  						   bool shared_relation);
  
  /*
   * Routines for flushing/rebuilding relcache entries in various scenarios
   */
  extern void RelationForgetRelation(Oid rid);
  
  extern void RelationCacheInvalidateEntry(Oid relationId);
  
  extern void RelationCacheInvalidate(void);
  
  extern void AtEOXact_RelationCache(bool isCommit);
  extern void AtEOSubXact_RelationCache(bool isCommit, SubTransactionId mySubid,
  						  SubTransactionId parentSubid);
  
  /*
   * Routines to help manage rebuilding of relcache init file
   */
  extern bool RelationIdIsInInitFile(Oid relationId);
  extern void RelationCacheInitFilePreInvalidate(void);
  extern void RelationCacheInitFilePostInvalidate(void);
  extern void RelationCacheInitFileRemove(const char *dbPath);
  
  /* should be used only by relcache.c and catcache.c */
  extern bool criticalRelcachesBuilt;
  
  #endif   /* RELCACHE_H */
  