diff options
Diffstat (limited to 'src/backend/utils/cache/lsyscache.c')
-rw-r--r-- | src/backend/utils/cache/lsyscache.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c index b891f388e5d..0667ef5a81b 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -837,6 +837,38 @@ get_attnum(Oid relid, const char *attname) } /* + * get_attidentity + * + * Given the relation id and the attribute name, + * return the "attidentity" field from the attribute relation. + * + * Returns '\0' if not found. + * + * Since no identity is represented by '\0', this can also be used as a + * Boolean test. + */ +char +get_attidentity(Oid relid, AttrNumber attnum) +{ + HeapTuple tp; + + tp = SearchSysCache2(ATTNUM, + ObjectIdGetDatum(relid), + Int16GetDatum(attnum)); + if (HeapTupleIsValid(tp)) + { + Form_pg_attribute att_tup = (Form_pg_attribute) GETSTRUCT(tp); + char result; + + result = att_tup->attidentity; + ReleaseSysCache(tp); + return result; + } + else + return '\0'; +} + +/* * get_atttype * * Given the relation OID and the attribute number with the relation, |