1/*-------------------------------------------------------------------------
2 *
3 * ts_cache.h
4 * Tsearch related object caches.
5 *
6 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * src/include/tsearch/ts_cache.h
10 *
11 *-------------------------------------------------------------------------
12 */
13#ifndef TS_CACHE_H
14#define TS_CACHE_H
15
16#include "utils/guc.h"
17
18
19/*
20 * All TS*CacheEntry structs must share this common header
21 * (see InvalidateTSCacheCallBack)
22 */
23typedef struct TSAnyCacheEntry
24{
25 Oid objId;
26 bool isvalid;
27} TSAnyCacheEntry;
28
29
30typedef struct TSParserCacheEntry
31{
32 /* prsId is the hash lookup key and MUST BE FIRST */
33 Oid prsId; /* OID of the parser */
34 bool isvalid;
35
36 Oid startOid;
37 Oid tokenOid;
38 Oid endOid;
39 Oid headlineOid;
40 Oid lextypeOid;
41
42 /*
43 * Pre-set-up fmgr call of most needed parser's methods
44 */
45 FmgrInfo prsstart;
46 FmgrInfo prstoken;
47 FmgrInfo prsend;
48 FmgrInfo prsheadline;
49} TSParserCacheEntry;
50
51typedef struct TSDictionaryCacheEntry
52{
53 /* dictId is the hash lookup key and MUST BE FIRST */
54 Oid dictId;
55 bool isvalid;
56
57 /* most frequent fmgr call */
58 Oid lexizeOid;
59 FmgrInfo lexize;
60
61 MemoryContext dictCtx; /* memory context to store private data */
62 void *dictData;
63} TSDictionaryCacheEntry;
64
65typedef struct
66{
67 int len;
68 Oid *dictIds;
69} ListDictionary;
70
71typedef struct
72{
73 /* cfgId is the hash lookup key and MUST BE FIRST */
74 Oid cfgId;
75 bool isvalid;
76
77 Oid prsId;
78
79 int lenmap;
80 ListDictionary *map;
81} TSConfigCacheEntry;
82
83
84/*
85 * GUC variable for current configuration
86 */
87extern char *TSCurrentConfig;
88
89
90extern TSParserCacheEntry *lookup_ts_parser_cache(Oid prsId);
91extern TSDictionaryCacheEntry *lookup_ts_dictionary_cache(Oid dictId);
92extern TSConfigCacheEntry *lookup_ts_config_cache(Oid cfgId);
93
94extern Oid getTSCurrentConfig(bool emitError);
95extern bool check_TSCurrentConfig(char **newval, void **extra, GucSource source);
96extern void assign_TSCurrentConfig(const char *newval, void *extra);
97
98#endif /* TS_CACHE_H */
99