summaryrefslogtreecommitdiff
path: root/src/backend/rewrite
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-10-14 22:14:35 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-10-14 22:14:35 +0000
commitd508b057ac0834eb6ea83b10ba9fd6c439b454a4 (patch)
treec100e9e56c25d3f6f57cd2be986b294258665a36 /src/backend/rewrite
parentea3728ee5b60ee479caa865590d14f71f612dcdb (diff)
downloadpostgresql-d508b057ac0834eb6ea83b10ba9fd6c439b454a4.tar.gz
Adjust handling of command status strings in the presence of rules,
as per recent pghackers discussions. initdb forced due to change in fields of stored Query nodes.
Diffstat (limited to 'src/backend/rewrite')
-rw-r--r--src/backend/rewrite/rewriteHandler.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index 0b2d839eb3..180e56d920 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.110 2002/09/18 21:35:22 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.111 2002/10/14 22:14:35 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -942,6 +942,7 @@ fireRules(Query *parsetree,
RewriteRule *rule_lock = (RewriteRule *) lfirst(i);
Node *event_qual;
List *actions;
+ QuerySource qsrc;
List *r;
/* multiple rule action time */
@@ -949,7 +950,18 @@ fireRules(Query *parsetree,
event_qual = rule_lock->qual;
actions = rule_lock->actions;
- if (event_qual != NULL && *instead_flag)
+ /* Determine correct QuerySource value for actions */
+ if (rule_lock->isInstead)
+ {
+ if (event_qual != NULL)
+ qsrc = QSRC_QUAL_INSTEAD_RULE;
+ else
+ qsrc = QSRC_INSTEAD_RULE;
+ }
+ else
+ qsrc = QSRC_NON_INSTEAD_RULE;
+
+ if (qsrc == QSRC_QUAL_INSTEAD_RULE)
{
Query *qual_product;
@@ -976,6 +988,7 @@ fireRules(Query *parsetree,
*qual_products = makeList1(qual_product);
}
+ /* Now process the rule's actions and add them to the result list */
foreach(r, actions)
{
Query *rule_action = lfirst(r);
@@ -986,6 +999,8 @@ fireRules(Query *parsetree,
rule_action = rewriteRuleAction(parsetree, rule_action,
event_qual, rt_index, event);
+ rule_action->querySource = qsrc;
+
results = lappend(results, rule_action);
}
@@ -993,9 +1008,10 @@ fireRules(Query *parsetree,
* If this was an unqualified instead rule, throw away an
* eventually saved 'default' parsetree
*/
- if (event_qual == NULL && *instead_flag)
+ if (qsrc == QSRC_INSTEAD_RULE)
*qual_products = NIL;
}
+
return results;
}