1 /*-------------------------------------------------------------------------
2  *
3  * ts_cache.h
4  *	  Tsearch related object caches.
5  *
6  * Portions Copyright (c) 1996-2021, 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  */
23 typedef struct TSAnyCacheEntry
24 {
25 	Oid			objId;
26 	bool		isvalid;
27 } TSAnyCacheEntry;
28 
29 
30 typedef 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 
51 typedef 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 
65 typedef struct
66 {
67 	int			len;
68 	Oid		   *dictIds;
69 } ListDictionary;
70 
71 typedef 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  */
87 extern char *TSCurrentConfig;
88 
89 
90 extern TSParserCacheEntry *lookup_ts_parser_cache(Oid prsId);
91 extern TSDictionaryCacheEntry *lookup_ts_dictionary_cache(Oid dictId);
92 extern TSConfigCacheEntry *lookup_ts_config_cache(Oid cfgId);
93 
94 extern Oid	getTSCurrentConfig(bool emitError);
95 extern bool check_TSCurrentConfig(char **newval, void **extra, GucSource source);
96 extern void assign_TSCurrentConfig(const char *newval, void *extra);
97 
98 #endif							/* TS_CACHE_H */
99