36 List *ancestor_views);
52 bool recurse = rv->
inh;
58 (
void *) &lockstmt->
mode);
88 if (relkind != RELKIND_RELATION && relkind != RELKIND_PARTITIONED_TABLE &&
89 relkind != RELKIND_VIEW)
91 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
92 errmsg(
"\"%s\" is not a table or view",
100 if (relpersistence == RELPERSISTENCE_TEMP)
124 foreach(lc, children)
129 if (childreloid == reloid)
142 (
errcode(ERRCODE_LOCK_NOT_AVAILABLE),
143 errmsg(
"could not obtain lock on relation \"%s\"",
187 foreach(rtable, query->
rtable)
200 if (relid == context->
viewoid &&
206 if (relkind != RELKIND_RELATION && relkind != RELKIND_PARTITIONED_TABLE &&
207 relkind != RELKIND_VIEW)
227 (
errcode(ERRCODE_LOCK_NOT_AVAILABLE),
228 errmsg(
"could not obtain lock on relation \"%s\"",
231 if (relkind == RELKIND_VIEW)
251 List *ancestor_views)
bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode)
bool query_tree_walker(Query *query, bool(*walker)(), void *context, int flags)
#define IsA(nodeptr, _type_)
void table_close(Relation relation, LOCKMODE lockmode)
static bool LockViewRecurse_walker(Node *node, LockViewRecurse_context *context)
void UnlockRelationOid(Oid relid, LOCKMODE lockmode)
char get_rel_relkind(Oid relid)
AclMode aclmask(const Acl *acl, Oid roleid, Oid ownerId, AclMode mask, AclMaskHow how)
int errcode(int sqlerrcode)
static void LockViewRecurse(Oid reloid, LOCKMODE lockmode, bool nowait, List *ancestor_views)
List * lappend_oid(List *list, Oid datum)
#define OidIsValid(objectId)
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
static AclResult LockTableAclCheck(Oid relid, LOCKMODE lockmode, Oid userid)
#define SearchSysCacheExists1(cacheId, key1)
#define ObjectIdGetDatum(X)
List * list_delete_last(List *list)
Oid RangeVarGetRelidExtended(const RangeVar *relation, LOCKMODE lockmode, uint32 flags, RangeVarGetRelidCallback callback, void *callback_arg)
#define XACT_FLAGS_ACCESSEDTEMPNAMESPACE
static void LockTableRecurse(Oid reloid, LOCKMODE lockmode, bool nowait)
#define ereport(elevel,...)
bool list_member_oid(const List *list, Oid datum)
bool expression_tree_walker(Node *node, bool(*walker)(), void *context)
static void RangeVarCallbackForLockTable(const RangeVar *rv, Oid relid, Oid oldrelid, void *arg)
AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode)
char get_rel_persistence(Oid relid)
List * find_all_inheritors(Oid parentrelId, LOCKMODE lockmode, List **numparents)
void LockTableCommand(LockStmt *lockstmt)
int errmsg(const char *fmt,...)
Query * get_view_query(Relation view)
ObjectType get_relkind_objtype(char relkind)
void LockRelationOid(Oid relid, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
char * get_rel_name(Oid relid)
#define QTW_IGNORE_JOINALIASES