diff options
Diffstat (limited to 'src/backend/rewrite/locks.c')
-rw-r--r-- | src/backend/rewrite/locks.c | 173 |
1 files changed, 91 insertions, 82 deletions
diff --git a/src/backend/rewrite/locks.c b/src/backend/rewrite/locks.c index 3171d2c845b..213fae9b321 100644 --- a/src/backend/rewrite/locks.c +++ b/src/backend/rewrite/locks.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/Attic/locks.c,v 1.2 1996/11/10 03:01:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/Attic/locks.c,v 1.3 1997/09/07 04:48:02 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -14,7 +14,7 @@ #include "utils/elog.h" /* for elog */ #include "nodes/pg_list.h" /* lisp support package */ #include "nodes/parsenodes.h" -#include "nodes/primnodes.h" /* Var node def */ +#include "nodes/primnodes.h" /* Var node def */ #include "utils/syscache.h" /* for SearchSysCache */ #include "rewrite/locks.h" /* for rewrite specific lock defns */ @@ -26,106 +26,115 @@ * if we find at least one such match, we return true * otherwise, we return false */ -static bool -nodeThisLockWasTriggered(Node *node, int varno, AttrNumber attnum) +static bool +nodeThisLockWasTriggered(Node * node, int varno, AttrNumber attnum) { - if (node==NULL) - return FALSE; - switch(nodeTag(node)) { - case T_Var: + if (node == NULL) + return FALSE; + switch (nodeTag(node)) { - Var *var = (Var *)node; - if (varno == var->varno && - (attnum == var->varattno || attnum == -1)) - return TRUE; - } - break; - case T_Expr: - { - Expr *expr = (Expr*)node; - return - nodeThisLockWasTriggered((Node*)expr->args, varno, attnum); - } - break; - case T_TargetEntry: - { - TargetEntry *tle = (TargetEntry *)node; - return - nodeThisLockWasTriggered(tle->expr, varno, attnum); - } - break; - case T_List: - { - List *l; + case T_Var: + { + Var *var = (Var *) node; + + if (varno == var->varno && + (attnum == var->varattno || attnum == -1)) + return TRUE; + } + break; + case T_Expr: + { + Expr *expr = (Expr *) node; + + return + nodeThisLockWasTriggered((Node *) expr->args, varno, attnum); + } + break; + case T_TargetEntry: + { + TargetEntry *tle = (TargetEntry *) node; + + return + nodeThisLockWasTriggered(tle->expr, varno, attnum); + } + break; + case T_List: + { + List *l; - foreach(l, (List*)node) { - if (nodeThisLockWasTriggered(lfirst(l), varno, attnum)) - return TRUE; - } - return FALSE; + foreach(l, (List *) node) + { + if (nodeThisLockWasTriggered(lfirst(l), varno, attnum)) + return TRUE; + } + return FALSE; + } + break; + default: + break; } - break; - default: - break; - } - return (FALSE); + return (FALSE); } /* * thisLockWasTriggered - - * walk the tree, if there we find a varnode, we check the varattno - * against the attnum if we find at least one such match, we return true - * otherwise, we return false + * walk the tree, if there we find a varnode, we check the varattno + * against the attnum if we find at least one such match, we return true + * otherwise, we return false */ -static bool +static bool thisLockWasTriggered(int varno, - AttrNumber attnum, - Query *parsetree) + AttrNumber attnum, + Query * parsetree) { - return + return (nodeThisLockWasTriggered(parsetree->qual, varno, attnum) || - nodeThisLockWasTriggered((Node*)parsetree->targetList, - varno, attnum)); + nodeThisLockWasTriggered((Node *) parsetree->targetList, + varno, attnum)); } /* * matchLocks - - * match the list of locks and returns the matching rules + * match the list of locks and returns the matching rules */ -List * +List * matchLocks(CmdType event, - RuleLock *rulelocks, - int varno, - Query *parsetree) + RuleLock * rulelocks, + int varno, + Query * parsetree) { - List *real_locks = NIL; - int nlocks; - int i; - - Assert(rulelocks != NULL); /* we get called iff there is some lock */ - Assert(parsetree != NULL); - - if (parsetree->commandType != CMD_SELECT) { - if (parsetree->resultRelation != varno) { - return ( NULL ); + List *real_locks = NIL; + int nlocks; + int i; + + Assert(rulelocks != NULL); /* we get called iff there is some lock */ + Assert(parsetree != NULL); + + if (parsetree->commandType != CMD_SELECT) + { + if (parsetree->resultRelation != varno) + { + return (NULL); + } } - } - - nlocks = rulelocks->numLocks; - - for (i = 0; i < nlocks; i++) { - RewriteRule *oneLock = rulelocks->rules[i]; - if (oneLock->event == event) { - if (parsetree->commandType != CMD_SELECT || - thisLockWasTriggered(varno, - oneLock->attrno, - parsetree)) { - real_locks = lappend(real_locks, oneLock); - } + nlocks = rulelocks->numLocks; + + for (i = 0; i < nlocks; i++) + { + RewriteRule *oneLock = rulelocks->rules[i]; + + if (oneLock->event == event) + { + if (parsetree->commandType != CMD_SELECT || + thisLockWasTriggered(varno, + oneLock->attrno, + parsetree)) + { + real_locks = lappend(real_locks, oneLock); + } + } } - } - - return (real_locks); -} + return (real_locks); +} |