Age Owner Branch data TLA 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
565 peter@eisentraut.org 69 :CBC 484501 : DatumGetGinTernaryValue(Datum X)
70 : : {
71 : 484501 : return (GinTernaryValue) X;
72 : : }
73 : :
74 : : static inline Datum
75 : 484501 : GinTernaryValueGetDatum(GinTernaryValue X)
76 : : {
77 : 484501 : 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 */
|