PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
pg_parameter_acl.c File Reference
#include "postgres.h"
#include "access/table.h"
#include "catalog/catalog.h"
#include "catalog/indexing.h"
#include "catalog/pg_parameter_acl.h"
#include "utils/builtins.h"
#include "utils/guc.h"
#include "utils/rel.h"
#include "utils/syscache.h"
Include dependency graph for pg_parameter_acl.c:

Go to the source code of this file.

Functions

Oid ParameterAclLookup (const char *parameter, bool missing_ok)
 
Oid ParameterAclCreate (const char *parameter)
 

Function Documentation

◆ ParameterAclCreate()

Oid ParameterAclCreate ( const char *  parameter)

Definition at line 68 of file pg_parameter_acl.c.

69{
70 Oid parameterId;
71 char *parname;
72 Relation rel;
73 TupleDesc tupDesc;
74 HeapTuple tuple;
75 Datum values[Natts_pg_parameter_acl] = {0};
76 bool nulls[Natts_pg_parameter_acl] = {0};
77
78 /*
79 * To prevent cluttering pg_parameter_acl with useless entries, insist
80 * that the name be valid.
81 */
83
84 /* Convert name to the form it should have in pg_parameter_acl. */
85 parname = convert_GUC_name_for_parameter_acl(parameter);
86
87 /*
88 * Create and insert a new record containing a null ACL.
89 *
90 * We don't take a strong enough lock to prevent concurrent insertions,
91 * relying instead on the unique index.
92 */
93 rel = table_open(ParameterAclRelationId, RowExclusiveLock);
94 tupDesc = RelationGetDescr(rel);
95 parameterId = GetNewOidWithIndex(rel,
96 ParameterAclOidIndexId,
97 Anum_pg_parameter_acl_oid);
98 values[Anum_pg_parameter_acl_oid - 1] = ObjectIdGetDatum(parameterId);
99 values[Anum_pg_parameter_acl_parname - 1] =
101 nulls[Anum_pg_parameter_acl_paracl - 1] = true;
102 tuple = heap_form_tuple(tupDesc, values, nulls);
103 CatalogTupleInsert(rel, tuple);
104
105 /* Close pg_parameter_acl, but keep lock till commit. */
106 heap_freetuple(tuple);
107 table_close(rel, NoLock);
108
109 return parameterId;
110}
static Datum values[MAXATTR]
Definition: bootstrap.c:151
Oid GetNewOidWithIndex(Relation relation, Oid indexId, AttrNumber oidcolumn)
Definition: catalog.c:419
void check_GUC_name_for_parameter_acl(const char *name)
Definition: guc.c:1410
char * convert_GUC_name_for_parameter_acl(const char *name)
Definition: guc.c:1374
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, const Datum *values, const bool *isnull)
Definition: heaptuple.c:1117
void heap_freetuple(HeapTuple htup)
Definition: heaptuple.c:1435
void CatalogTupleInsert(Relation heapRel, HeapTuple tup)
Definition: indexing.c:233
#define NoLock
Definition: lockdefs.h:34
#define RowExclusiveLock
Definition: lockdefs.h:38
static Datum PointerGetDatum(const void *X)
Definition: postgres.h:327
uintptr_t Datum
Definition: postgres.h:69
static Datum ObjectIdGetDatum(Oid X)
Definition: postgres.h:257
unsigned int Oid
Definition: postgres_ext.h:32
#define RelationGetDescr(relation)
Definition: rel.h:538
void table_close(Relation relation, LOCKMODE lockmode)
Definition: table.c:126
Relation table_open(Oid relationId, LOCKMODE lockmode)
Definition: table.c:40
text * cstring_to_text(const char *s)
Definition: varlena.c:192

References CatalogTupleInsert(), check_GUC_name_for_parameter_acl(), convert_GUC_name_for_parameter_acl(), cstring_to_text(), GetNewOidWithIndex(), heap_form_tuple(), heap_freetuple(), NoLock, ObjectIdGetDatum(), PointerGetDatum(), RelationGetDescr, RowExclusiveLock, table_close(), table_open(), and values.

Referenced by objectNamesToOids().

◆ ParameterAclLookup()

Oid ParameterAclLookup ( const char *  parameter,
bool  missing_ok 
)

Definition at line 35 of file pg_parameter_acl.c.

36{
37 Oid oid;
38 char *parname;
39
40 /* Convert name to the form it should have in pg_parameter_acl... */
41 parname = convert_GUC_name_for_parameter_acl(parameter);
42
43 /* ... and look it up */
44 oid = GetSysCacheOid1(PARAMETERACLNAME, Anum_pg_parameter_acl_oid,
46
47 if (!OidIsValid(oid) && !missing_ok)
49 (errcode(ERRCODE_UNDEFINED_OBJECT),
50 errmsg("parameter ACL \"%s\" does not exist", parameter)));
51
52 pfree(parname);
53
54 return oid;
55}
#define OidIsValid(objectId)
Definition: c.h:746
int errcode(int sqlerrcode)
Definition: elog.c:853
int errmsg(const char *fmt,...)
Definition: elog.c:1070
#define ERROR
Definition: elog.h:39
#define ereport(elevel,...)
Definition: elog.h:149
void pfree(void *pointer)
Definition: mcxt.c:1524
#define GetSysCacheOid1(cacheId, oidcol, key1)
Definition: syscache.h:109

References convert_GUC_name_for_parameter_acl(), cstring_to_text(), ereport, errcode(), errmsg(), ERROR, GetSysCacheOid1, OidIsValid, pfree(), and PointerGetDatum().

Referenced by get_object_address_unqualified(), and objectNamesToOids().