aboutsummaryrefslogtreecommitdiff
path: root/src/backend/rewrite/locks.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/rewrite/locks.c')
-rw-r--r--src/backend/rewrite/locks.c76
1 files changed, 15 insertions, 61 deletions
diff --git a/src/backend/rewrite/locks.c b/src/backend/rewrite/locks.c
index a14e1b48684..78fdad8960a 100644
--- a/src/backend/rewrite/locks.c
+++ b/src/backend/rewrite/locks.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/rewrite/Attic/locks.c,v 1.31 2000/09/06 14:15:20 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/rewrite/Attic/locks.c,v 1.32 2000/09/12 21:07:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -56,38 +56,16 @@ thisLockWasTriggered_walker(Node *node,
return true;
return false;
}
- if (IsA(node, SubLink))
+ if (IsA(node, Query))
{
+ /* Recurse into subselects */
+ bool result;
- /*
- * Standard expression_tree_walker will not recurse into
- * subselect, but here we must do so.
- */
- SubLink *sub = (SubLink *) node;
-
- if (thisLockWasTriggered_walker((Node *) (sub->lefthand), context))
- return true;
context->sublevels_up++;
- if (thisLockWasTriggered_walker((Node *) (sub->subselect), context))
- {
- context->sublevels_up--; /* not really necessary */
- return true;
- }
+ result = query_tree_walker((Query *) node, thisLockWasTriggered_walker,
+ (void *) context);
context->sublevels_up--;
- return false;
- }
- if (IsA(node, Query))
- {
- /* Reach here after recursing down into subselect above... */
- Query *qry = (Query *) node;
-
- if (thisLockWasTriggered_walker((Node *) (qry->targetList), context))
- return true;
- if (thisLockWasTriggered_walker((Node *) (qry->qual), context))
- return true;
- if (thisLockWasTriggered_walker((Node *) (qry->havingQual), context))
- return true;
- return false;
+ return result;
}
return expression_tree_walker(node, thisLockWasTriggered_walker,
(void *) context);
@@ -175,7 +153,7 @@ matchLocks(CmdType event,
typedef struct
{
- Oid evowner;
+ Oid evowner;
} checkLockPerms_context;
static bool
@@ -184,23 +162,8 @@ checkLockPerms_walker(Node *node,
{
if (node == NULL)
return false;
- if (IsA(node, SubLink))
- {
- /*
- * Standard expression_tree_walker will not recurse into
- * subselect, but here we must do so.
- */
- SubLink *sub = (SubLink *) node;
-
- if (checkLockPerms_walker((Node *) (sub->lefthand), context))
- return true;
- if (checkLockPerms_walker((Node *) (sub->subselect), context))
- return true;
- return false;
- }
if (IsA(node, Query))
{
- /* Reach here after recursing down into subselect above... */
Query *qry = (Query *) node;
int rtablength = length(qry->rtable);
int i;
@@ -212,13 +175,10 @@ checkLockPerms_walker(Node *node,
int32 reqperm;
int32 aclcheck_res;
- if (rte->ref != NULL)
- {
- if (strcmp(rte->ref->relname, "*NEW*") == 0)
- continue;
- if (strcmp(rte->ref->relname, "*OLD*") == 0)
- continue;
- }
+ if (strcmp(rte->eref->relname, "*NEW*") == 0)
+ continue;
+ if (strcmp(rte->eref->relname, "*OLD*") == 0)
+ continue;
if (i == qry->resultRelation)
switch (qry->commandType)
@@ -250,14 +210,8 @@ checkLockPerms_walker(Node *node,
/* If there are sublinks, search for them and check their RTEs */
if (qry->hasSubLinks)
- {
- if (checkLockPerms_walker((Node *) (qry->targetList), context))
- return true;
- if (checkLockPerms_walker((Node *) (qry->qual), context))
- return true;
- if (checkLockPerms_walker((Node *) (qry->havingQual), context))
- return true;
- }
+ return query_tree_walker(qry, checkLockPerms_walker,
+ (void *) context);
return false;
}
return expression_tree_walker(node, checkLockPerms_walker,
@@ -278,7 +232,7 @@ checkLockPerms(List *locks, Query *parsetree, int rt_index)
return; /* nothing to check */
/*
- * Get the usename of the rule's event relation owner
+ * Get the userid of the rule's event relation owner
*/
rte = rt_fetch(rt_index, parsetree->rtable);
ev_rel = heap_openr(rte->relname, AccessShareLock);