PostgreSQL Source Code git master
Loading...
Searching...
No Matches
attoptcache.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  AttributeOpts
 

Typedefs

typedef struct AttributeOpts AttributeOpts
 

Functions

AttributeOptsget_attribute_options (Oid attrelid, int attnum)
 

Typedef Documentation

◆ AttributeOpts

Function Documentation

◆ get_attribute_options()

AttributeOpts * get_attribute_options ( Oid  attrelid,
int  attnum 
)
extern

Definition at line 132 of file attoptcache.c.

133{
136 AttributeOpts *result;
137 HeapTuple tp;
138
139 /* Find existing cache entry, if any. */
140 if (!AttoptCacheHash)
142 memset(&key, 0, sizeof(key)); /* make sure any padding bits are unset */
143 key.attrelid = attrelid;
144 key.attnum = attnum;
145 attopt =
147 &key,
148 HASH_FIND,
149 NULL);
150
151 /* Not found in Attopt cache. Construct new cache entry. */
152 if (!attopt)
153 {
155
157 ObjectIdGetDatum(attrelid),
159
160 /*
161 * If we don't find a valid HeapTuple, it must mean someone has
162 * managed to request attribute details for a non-existent attribute.
163 * We treat that case as if no options were specified.
164 */
165 if (!HeapTupleIsValid(tp))
166 opts = NULL;
167 else
168 {
169 Datum datum;
170 bool isNull;
171
172 datum = SysCacheGetAttr(ATTNUM,
173 tp,
175 &isNull);
176 if (isNull)
177 opts = NULL;
178 else
179 {
180 bytea *bytea_opts = attribute_reloptions(datum, false);
181
185 }
186 ReleaseSysCache(tp);
187 }
188
189 /*
190 * It's important to create the actual cache entry only after reading
191 * pg_attribute, since the read could cause a cache flush.
192 */
194 &key,
196 NULL);
197 attopt->opts = opts;
198 }
199
200 /* Return results in caller's memory context. */
201 if (attopt->opts == NULL)
202 return NULL;
203 result = palloc(VARSIZE(attopt->opts));
204 memcpy(result, attopt->opts, VARSIZE(attopt->opts));
205 return result;
206}
static HTAB * AttoptCacheHash
Definition attoptcache.c:29
static void InitializeAttoptCache(void)
Definition attoptcache.c:98
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
Definition dynahash.c:952
@ HASH_FIND
Definition hsearch.h:113
@ HASH_ENTER
Definition hsearch.h:114
#define HeapTupleIsValid(tuple)
Definition htup.h:78
void * MemoryContextAlloc(MemoryContext context, Size size)
Definition mcxt.c:1232
void * palloc(Size size)
Definition mcxt.c:1387
MemoryContext CacheMemoryContext
Definition mcxt.c:169
static AmcheckOptions opts
Definition pg_amcheck.c:112
int16 attnum
static Datum Int16GetDatum(int16 X)
Definition postgres.h:182
static Datum ObjectIdGetDatum(Oid X)
Definition postgres.h:262
uint64_t Datum
Definition postgres.h:70
static int fb(int x)
bytea * attribute_reloptions(Datum reloptions, bool validate)
Definition c.h:718
void ReleaseSysCache(HeapTuple tuple)
Definition syscache.c:264
HeapTuple SearchSysCache2(SysCacheIdentifier cacheId, Datum key1, Datum key2)
Definition syscache.c:230
Datum SysCacheGetAttr(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Definition syscache.c:595
static Size VARSIZE(const void *PTR)
Definition varatt.h:298

References attnum, AttoptCacheHash, attribute_reloptions(), CacheMemoryContext, fb(), HASH_ENTER, HASH_FIND, hash_search(), HeapTupleIsValid, InitializeAttoptCache(), Int16GetDatum(), MemoryContextAlloc(), ObjectIdGetDatum(), opts, palloc(), ReleaseSysCache(), SearchSysCache2(), SysCacheGetAttr(), and VARSIZE().

Referenced by compute_expr_stats(), and do_analyze_rel().