]> granicus.if.org Git - postgresql/blobdiff - src/include/catalog/index.h
Initial pgindent run for v12.
[postgresql] / src / include / catalog / index.h
index 12bf35567a7e334a9cf36624c2c6bfac4bd3f2f4..c5729e262896b02b3a57f81ae881e45c26e07ddd 100644 (file)
@@ -4,7 +4,7 @@
  *       prototypes for catalog/index.c.
  *
  *
- * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * src/include/catalog/index.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);
-
 /* Action code for index_set_state_flags */
 typedef enum
 {
@@ -37,20 +29,34 @@ typedef enum
        INDEX_DROP_SET_DEAD
 } IndexStateFlagsAction;
 
+/* state info for validate_index bulkdelete callback */
+typedef struct ValidateIndexState
+{
+       Tuplesortstate *tuplesort;      /* for sorting the index TIDs */
+       /* statistics (for debug purposes only): */
+       double          htups,
+                               itups,
+                               tups_inserted;
+} ValidateIndexState;
 
 extern void index_check_primary_key(Relation heapRel,
                                                IndexInfo *indexInfo,
-                                               bool is_alter_table);
+                                               bool is_alter_table,
+                                               IndexStmt *stmt);
 
 #define        INDEX_CREATE_IS_PRIMARY                         (1 << 0)
 #define        INDEX_CREATE_ADD_CONSTRAINT                     (1 << 1)
 #define        INDEX_CREATE_SKIP_BUILD                         (1 << 2)
 #define        INDEX_CREATE_CONCURRENT                         (1 << 3)
 #define        INDEX_CREATE_IF_NOT_EXISTS                      (1 << 4)
+#define        INDEX_CREATE_PARTITIONED                        (1 << 5)
+#define INDEX_CREATE_INVALID                           (1 << 6)
 
 extern Oid index_create(Relation heapRelation,
                         const char *indexRelationName,
                         Oid indexRelationId,
+                        Oid parentIndexRelid,
+                        Oid parentConstraintId,
                         Oid relFileNode,
                         IndexInfo *indexInfo,
                         List *indexColNames,
@@ -63,7 +69,8 @@ extern Oid index_create(Relation heapRelation,
                         bits16 flags,
                         bits16 constr_flags,
                         bool allow_system_table_mods,
-                        bool is_internal);
+                        bool is_internal,
+                        Oid *constraintId);
 
 #define        INDEX_CONSTR_CREATE_MARK_AS_PRIMARY     (1 << 0)
 #define        INDEX_CONSTR_CREATE_DEFERRABLE          (1 << 1)
@@ -71,8 +78,23 @@ extern Oid index_create(Relation heapRelation,
 #define        INDEX_CONSTR_CREATE_UPDATE_INDEX        (1 << 3)
 #define        INDEX_CONSTR_CREATE_REMOVE_OLD_DEPS     (1 << 4)
 
+extern Oid index_concurrently_create_copy(Relation heapRelation,
+                                                          Oid oldIndexId,
+                                                          const char *newName);
+
+extern void index_concurrently_build(Oid heapRelationId,
+                                                Oid indexRelationId);
+
+extern void index_concurrently_swap(Oid newIndexId,
+                                               Oid oldIndexId,
+                                               const char *oldName);
+
+extern void index_concurrently_set_dead(Oid heapId,
+                                                       Oid indexId);
+
 extern ObjectAddress index_constraint_create(Relation heapRelation,
                                                Oid indexRelationId,
+                                               Oid parentConstraintId,
                                                IndexInfo *indexInfo,
                                                const char *constraintName,
                                                char constraintType,
@@ -80,10 +102,15 @@ extern ObjectAddress index_constraint_create(Relation heapRelation,
                                                bool allow_system_table_mods,
                                                bool is_internal);
 
-extern void index_drop(Oid indexId, bool concurrent);
+extern void index_drop(Oid indexId, bool concurrent, bool concurrent_lock_mode);
 
 extern IndexInfo *BuildIndexInfo(Relation index);
 
+extern bool CompareIndexInfo(IndexInfo *info1, IndexInfo *info2,
+                                Oid *collations1, Oid *collations2,
+                                Oid *opfamilies1, Oid *opfamilies2,
+                                AttrNumber *attmap, int maplen);
+
 extern void BuildSpeculativeIndexInfo(Relation index, IndexInfo *ii);
 
 extern void FormIndexDatum(IndexInfo *indexInfo,
@@ -95,24 +122,8 @@ extern void FormIndexDatum(IndexInfo *indexInfo,
 extern void index_build(Relation heapRelation,
                        Relation indexRelation,
                        IndexInfo *indexInfo,
-                       bool isprimary,
-                       bool isreindex);
-
-extern double IndexBuildHeapScan(Relation heapRelation,
-                                  Relation indexRelation,
-                                  IndexInfo *indexInfo,
-                                  bool allow_sync,
-                                  IndexBuildCallback callback,
-                                  void *callback_state);
-extern double IndexBuildHeapRangeScan(Relation heapRelation,
-                                               Relation indexRelation,
-                                               IndexInfo *indexInfo,
-                                               bool allow_sync,
-                                               bool anyvisible,
-                                               BlockNumber start_blockno,
-                                               BlockNumber end_blockno,
-                                               IndexBuildCallback callback,
-                                               void *callback_state);
+                       bool isreindex,
+                       bool parallel);
 
 extern void validate_index(Oid heapId, Oid indexId, Snapshot snapshot);
 
@@ -134,4 +145,51 @@ extern bool ReindexIsProcessingHeap(Oid heapOid);
 extern bool ReindexIsProcessingIndex(Oid indexOid);
 extern Oid     IndexGetRelation(Oid indexId, bool missing_ok);
 
+extern Size EstimateReindexStateSpace(void);
+extern void SerializeReindexState(Size maxsize, char *start_address);
+extern void RestoreReindexState(void *reindexstate);
+
+extern void IndexSetParentIndex(Relation idx, Oid parentOid);
+
+
+/*
+ * itemptr_encode - Encode ItemPointer as int64/int8
+ *
+ * This representation must produce values encoded as int64 that sort in the
+ * same order as their corresponding original TID values would (using the
+ * default int8 opclass to produce a result equivalent to the default TID
+ * opclass).
+ *
+ * As noted in validate_index(), this can be significantly faster.
+ */
+static inline int64
+itemptr_encode(ItemPointer itemptr)
+{
+       BlockNumber block = ItemPointerGetBlockNumber(itemptr);
+       OffsetNumber offset = ItemPointerGetOffsetNumber(itemptr);
+       int64           encoded;
+
+       /*
+        * Use the 16 least significant bits for the offset.  32 adjacent bits are
+        * used for the block number.  Since remaining bits are unused, there
+        * cannot be negative encoded values (We assume a two's complement
+        * representation).
+        */
+       encoded = ((uint64) block << 16) | (uint16) offset;
+
+       return encoded;
+}
+
+/*
+ * itemptr_decode - Decode int64/int8 representation back to ItemPointer
+ */
+static inline void
+itemptr_decode(ItemPointer itemptr, int64 encoded)
+{
+       BlockNumber block = (BlockNumber) (encoded >> 16);
+       OffsetNumber offset = (OffsetNumber) (encoded & 0xFFFF);
+
+       ItemPointerSet(itemptr, block, offset);
+}
+
 #endif                                                 /* INDEX_H */