PostgreSQL Source Code  git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
gin.h
Go to the documentation of this file.
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 {
48  int64 nEntries;
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
70 {
71  return (GinTernaryValue) X;
72 }
73 
74 static inline Datum
76 {
77  return (Datum) X;
78 }
79 
80 #define PG_RETURN_GIN_TERNARY_VALUE(x) return GinTernaryValueGetDatum(x)
81 
82 /* GUC parameters */
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 */
uint32 BlockNumber
Definition: block.h:31
#define PGDLLIMPORT
Definition: c.h:1321
signed int int32
Definition: c.h:508
void ginGetStats(Relation index, GinStatsData *stats)
Definition: ginutil.c:624
static Datum GinTernaryValueGetDatum(GinTernaryValue X)
Definition: gin.h:74
static GinTernaryValue DatumGetGinTernaryValue(Datum X)
Definition: gin.h:68
char GinTernaryValue
Definition: gin.h:58
PGDLLIMPORT int gin_pending_list_limit
Definition: ginfast.c:39
StaticAssertDecl(sizeof(GinTernaryValue)==sizeof(bool), "sizes of GinTernaryValue and bool are not equal")
PGDLLIMPORT int GinFuzzySearchLimit
Definition: ginget.c:27
void ginUpdateStats(Relation index, const GinStatsData *stats, bool is_build)
Definition: ginutil.c:651
struct GinStatsData GinStatsData
uintptr_t Datum
Definition: postgres.h:64
BlockNumber nDataPages
Definition: gin.h:47
BlockNumber nPendingPages
Definition: gin.h:44
BlockNumber nEntryPages
Definition: gin.h:46
int64 nEntries
Definition: gin.h:48
BlockNumber nTotalPages
Definition: gin.h:45
int32 ginVersion
Definition: gin.h:49
Definition: type.h:95