text: /*-------------------------------------------------------------------------
   *
   * index.h
   *	  prototypes for catalog/index.c.
   *
   *
   * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * src/include/catalog/index.h
   *
   *-------------------------------------------------------------------------
   */
  #ifndef INDEX_H
  #define INDEX_H
  
  #include "nodes/execnodes.h"
  
  
  #define DEFAULT_INDEX_TYPE	"btree"
  
  /* Typedef for callback function for IndexBuildHeapScan */
  typedef void (*IndexBuildCallback) (Relation index,
  												HeapTuple htup,
  												Datum *values,
  												bool *isnull,
  												bool tupleIsAlive,
  												void *state);
  
  
  extern Oid index_create(Oid heapRelationId,
  			 const char *indexRelationName,
  			 Oid indexRelationId,
  			 IndexInfo *indexInfo,
  			 List *indexColNames,
  			 Oid accessMethodObjectId,
  			 Oid tableSpaceId,
  			 Oid *classObjectId,
  			 int16 *coloptions,
  			 Datum reloptions,
  			 bool isprimary,
  			 bool isconstraint,
  			 bool deferrable,
  			 bool initdeferred,
  			 bool allow_system_table_mods,
  			 bool skip_build,
  			 bool concurrent);
  
  extern void index_drop(Oid indexId);
  
  extern IndexInfo *BuildIndexInfo(Relation index);
  
  extern void FormIndexDatum(IndexInfo *indexInfo,
  			   TupleTableSlot *slot,
  			   EState *estate,
  			   Datum *values,
  			   bool *isnull);
  
  extern void index_build(Relation heapRelation,
  			Relation indexRelation,
  			IndexInfo *indexInfo,
  			bool isprimary);
  
  extern double IndexBuildHeapScan(Relation heapRelation,
  				   Relation indexRelation,
  				   IndexInfo *indexInfo,
  				   bool allow_sync,
  				   IndexBuildCallback callback,
  				   void *callback_state);
  
  extern void validate_index(Oid heapId, Oid indexId, Snapshot snapshot);
  
  extern void reindex_index(Oid indexId, bool skip_constraint_checks);
  extern bool reindex_relation(Oid relid, bool toast_too, bool heap_rebuilt);
  
  extern bool ReindexIsProcessingHeap(Oid heapOid);
  extern bool ReindexIsProcessingIndex(Oid indexOid);
  
  #endif   /* INDEX_H */
  