Line data Source code
1 : /*-------------------------------------------------------------------------- 2 : * gin.h 3 : * Public header file for Generalized Inverted Index access method. 4 : * 5 : * Copyright (c) 2006-2024, 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 : StaticAssertDecl(sizeof(GinTernaryValue) == sizeof(bool), 61 : "sizes of GinTernaryValue and bool are not equal"); 62 : 63 : #define GIN_FALSE 0 /* item is not present / does not match */ 64 : #define GIN_TRUE 1 /* item is present / matches */ 65 : #define GIN_MAYBE 2 /* don't know if item is present / don't know 66 : * if matches */ 67 : 68 : static inline GinTernaryValue 69 969108 : DatumGetGinTernaryValue(Datum X) 70 : { 71 969108 : return (GinTernaryValue) X; 72 : } 73 : 74 : static inline Datum 75 969108 : GinTernaryValueGetDatum(GinTernaryValue X) 76 : { 77 969108 : return (Datum) X; 78 : } 79 : 80 : #define PG_RETURN_GIN_TERNARY_VALUE(x) return GinTernaryValueGetDatum(x) 81 : 82 : /* GUC parameters */ 83 : extern PGDLLIMPORT int GinFuzzySearchLimit; 84 : extern PGDLLIMPORT int gin_pending_list_limit; 85 : 86 : /* ginutil.c */ 87 : extern void ginGetStats(Relation index, GinStatsData *stats); 88 : extern void ginUpdateStats(Relation index, const GinStatsData *stats, 89 : bool is_build); 90 : 91 : #endif /* GIN_H */