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.c173
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);
+}