1 /*-------------------------------------------------------------------------- 2 * gin.h 3 * Public header file for Generalized Inverted Index access method. 4 * 5 * Copyright (c) 2006-2020, PostgreSQL Global Development Group 6 * 7 * src/include/access/gin.h 8 *-------------------------------------------------------------------------- 9 */ 10 #ifndef GIN_H 11 #define GIN_H 12 13 #include "access/xlogreader.h" 14 #include "lib/stringinfo.h" 15 #include "storage/block.h" 16 #include "utils/relcache.h" 17 18 19 /* 20 * amproc indexes for inverted indexes. 21 */ 22 #define GIN_COMPARE_PROC 1 23 #define GIN_EXTRACTVALUE_PROC 2 24 #define GIN_EXTRACTQUERY_PROC 3 25 #define GIN_CONSISTENT_PROC 4 26 #define GIN_COMPARE_PARTIAL_PROC 5 27 #define GIN_TRICONSISTENT_PROC 6 28 #define GIN_OPTIONS_PROC 7 29 #define GINNProcs 7 30 31 /* 32 * searchMode settings for extractQueryFn. 33 */ 34 #define GIN_SEARCH_MODE_DEFAULT 0 35 #define GIN_SEARCH_MODE_INCLUDE_EMPTY 1 36 #define GIN_SEARCH_MODE_ALL 2 37 #define GIN_SEARCH_MODE_EVERYTHING 3 /* for internal use only */ 38 39 /* 40 * GinStatsData represents stats data for planner use 41 */ 42 typedef struct GinStatsData 43 { 44 BlockNumber nPendingPages; 45 BlockNumber nTotalPages; 46 BlockNumber nEntryPages; 47 BlockNumber nDataPages; 48 int64 nEntries; 49 int32 ginVersion; 50 } GinStatsData; 51 52 /* 53 * A ternary value used by tri-consistent functions. 54 * 55 * This must be of the same size as a bool because some code will cast a 56 * pointer to a bool to a pointer to a GinTernaryValue. 57 */ 58 typedef char GinTernaryValue; 59 60 #define GIN_FALSE 0 /* item is not present / does not match */ 61 #define GIN_TRUE 1 /* item is present / matches */ 62 #define GIN_MAYBE 2 /* don't know if item is present / don't know 63 * if matches */ 64 65 #define DatumGetGinTernaryValue(X) ((GinTernaryValue)(X)) 66 #define GinTernaryValueGetDatum(X) ((Datum)(X)) 67 #define PG_RETURN_GIN_TERNARY_VALUE(x) return GinTernaryValueGetDatum(x) 68 69 /* GUC parameters */ 70 extern PGDLLIMPORT int GinFuzzySearchLimit; 71 extern int gin_pending_list_limit; 72 73 /* ginutil.c */ 74 extern void ginGetStats(Relation index, GinStatsData *stats); 75 extern void ginUpdateStats(Relation index, const GinStatsData *stats, 76 bool is_build); 77 78 #endif /* GIN_H */ 79