@ -83,14 +83,6 @@ RangeVarCallbackForLockTable(const RangeVar *rv, Oid relid, Oid oldrelid,
return ; /* woops, concurrently dropped; no permissions
* check */
/* Currently, we only allow plain tables or views to be locked */
if ( relkind ! = RELKIND_RELATION & & relkind ! = RELKIND_PARTITIONED_TABLE & &
relkind ! = RELKIND_VIEW )
ereport ( ERROR ,
( errcode ( ERRCODE_WRONG_OBJECT_TYPE ) ,
errmsg ( " \" %s \" is not a table or view " ,
rv - > relname ) ) ) ;
/*
* Make note if a temporary relation has been accessed in this
* transaction .
@ -186,11 +178,13 @@ LockViewRecurse_walker(Node *node, LockViewRecurse_context *context)
foreach ( rtable , query - > rtable )
{
RangeTblEntry * rte = lfirst ( rtable ) ;
Oid relid ;
AclResult aclresult ;
Oid relid = rte - > relid ;
char relkind = rte - > relkind ;
char * relname = get_rel_name ( relid ) ;
/* ignore all non-relation RTEs */
if ( rte - > rtekind ! = RTE_RELATION )
continue ;
relid = rte - > relid ;
/*
* The OLD and NEW placeholder entries in the view ' s rtable are
@ -201,11 +195,6 @@ LockViewRecurse_walker(Node *node, LockViewRecurse_context *context)
strcmp ( rte - > eref - > aliasname , " new " ) = = 0 ) )
continue ;
/* Currently, we only allow plain tables or views to be locked. */
if ( relkind ! = RELKIND_RELATION & & relkind ! = RELKIND_PARTITIONED_TABLE & &
relkind ! = RELKIND_VIEW )
continue ;
/* Check infinite recursion in the view definition. */
if ( list_member_oid ( context - > ancestor_views , relid ) )
ereport ( ERROR ,
@ -216,7 +205,8 @@ LockViewRecurse_walker(Node *node, LockViewRecurse_context *context)
/* Check permissions with the view owner's privilege. */
aclresult = LockTableAclCheck ( relid , context - > lockmode , context - > viewowner ) ;
if ( aclresult ! = ACLCHECK_OK )
aclcheck_error ( aclresult , get_relkind_objtype ( relkind ) , relname ) ;
aclcheck_error ( aclresult , get_relkind_objtype ( rte - > relkind ) ,
get_rel_name ( relid ) ) ;
/* We have enough rights to lock the relation; do so. */
if ( ! context - > nowait )
@ -225,9 +215,9 @@ LockViewRecurse_walker(Node *node, LockViewRecurse_context *context)
ereport ( ERROR ,
( errcode ( ERRCODE_LOCK_NOT_AVAILABLE ) ,
errmsg ( " could not obtain lock on relation \" %s \" " ,
relname ) ) ) ;
get_ rel_ name( relid ) ) ) ) ;
if ( relkind = = RELKIND_VIEW )
if ( rte - > r elkind = = RELKIND_VIEW )
LockViewRecurse ( relid , context - > lockmode , context - > nowait , context - > ancestor_views ) ;
else if ( rte - > inh )
LockTableRecurse ( relid , context - > lockmode , context - > nowait ) ;