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