From bbb7b6f699492b00c2cecae7ecd60e14b68dbdd8 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 13 Jun 2001 18:56:30 +0000 Subject: [PATCH] Remove some dead code, simplify calling convention. --- src/backend/rewrite/rewriteHandler.c | 106 +++++++++++++++-------------------- src/include/rewrite/rewriteHandler.h | 18 +----- src/include/rewrite/rewriteManip.h | 8 +-- 3 files changed, 50 insertions(+), 82 deletions(-) diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index d78334d83d..a8e42960a4 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -1,13 +1,13 @@ /*------------------------------------------------------------------------- * * rewriteHandler.c + * Primary module of query rewriter. * * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.94 2001/06/12 18:54:22 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.95 2001/06/13 18:56:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -27,16 +27,16 @@ #include "parser/parse_target.h" #include "parser/parsetree.h" #include "parser/parse_type.h" +#include "rewrite/rewriteHandler.h" #include "rewrite/rewriteManip.h" #include "utils/lsyscache.h" -static RewriteInfo *gatherRewriteMeta(Query *parsetree, - Query *rule_action, - Node *rule_qual, - int rt_index, - CmdType event, - bool instead_flag); +static Query *rewriteRuleAction(Query *parsetree, + Query *rule_action, + Node *rule_qual, + int rt_index, + CmdType event); static List *adjustJoinTreeList(Query *parsetree, bool removert, int rt_index); static void markQueryForUpdate(Query *qry, bool skipOldNew); static List *matchLocks(CmdType event, RuleLock *rulelocks, @@ -45,40 +45,33 @@ static Query *fireRIRrules(Query *parsetree); /* - * gatherRewriteMeta - - * Gather meta information about parsetree, and rule. Fix rule body - * and qualifier so that they can be mixed with the parsetree and - * maintain semantic validity + * rewriteRuleAction - + * Rewrite the rule action with appropriate qualifiers (taken from + * the triggering query). */ -static RewriteInfo * -gatherRewriteMeta(Query *parsetree, +static Query * +rewriteRuleAction(Query *parsetree, Query *rule_action, Node *rule_qual, int rt_index, - CmdType event, - bool instead_flag) + CmdType event) { - RewriteInfo *info; + int current_varno, + new_varno; + int rt_length; Query *sub_action; Query **sub_action_ptr; - int rt_length; - info = (RewriteInfo *) palloc(sizeof(RewriteInfo)); - info->rt_index = rt_index; - info->event = event; - info->instead_flag = instead_flag; - info->rule_action = (Query *) copyObject(rule_action); - info->rule_qual = (Node *) copyObject(rule_qual); - if (info->rule_action == NULL) - { - info->nothing = TRUE; - return info; - } - info->nothing = FALSE; - info->action = info->rule_action->commandType; - info->current_varno = rt_index; + /* + * Make modifiable copies of rule action and qual (what we're passed + * are the stored versions in the relcache; don't touch 'em!). + */ + rule_action = (Query *) copyObject(rule_action); + rule_qual = (Node *) copyObject(rule_qual); + + current_varno = rt_index; rt_length = length(parsetree->rtable); - info->new_varno = PRS2_NEW_VARNO + rt_length; + new_varno = PRS2_NEW_VARNO + rt_length; /* * Adjust rule action and qual to offset its varnos, so that we can @@ -88,14 +81,14 @@ gatherRewriteMeta(Query *parsetree, * will be in the SELECT part, and we have to modify that rather than * the top-level INSERT (kluge!). */ - sub_action = getInsertSelectQuery(info->rule_action, &sub_action_ptr); + sub_action = getInsertSelectQuery(rule_action, &sub_action_ptr); OffsetVarNodes((Node *) sub_action, rt_length, 0); - OffsetVarNodes(info->rule_qual, rt_length, 0); + OffsetVarNodes(rule_qual, rt_length, 0); /* but references to *OLD* should point at original rt_index */ ChangeVarNodes((Node *) sub_action, PRS2_OLD_VARNO + rt_length, rt_index, 0); - ChangeVarNodes(info->rule_qual, + ChangeVarNodes(rule_qual, PRS2_OLD_VARNO + rt_length, rt_index, 0); /* @@ -135,8 +128,8 @@ gatherRewriteMeta(Query *parsetree, keeporig = (!rangeTableEntry_used((Node *) sub_action->jointree, rt_index, 0)) && - (rangeTableEntry_used(info->rule_qual, rt_index, 0) || - rangeTableEntry_used(parsetree->jointree->quals, rt_index, 0)); + (rangeTableEntry_used(rule_qual, rt_index, 0) || + rangeTableEntry_used(parsetree->jointree->quals, rt_index, 0)); newjointree = adjustJoinTreeList(parsetree, !keeporig, rt_index); sub_action->jointree->fromlist = nconc(newjointree, sub_action->jointree->fromlist); @@ -146,7 +139,8 @@ gatherRewriteMeta(Query *parsetree, * We copy the qualifications of the parsetree to the action and vice * versa. So force hasSubLinks if one of them has it. If this is not * right, the flag will get cleared later, but we mustn't risk having - * it not set when it needs to be. + * it not set when it needs to be. (XXX this should probably be handled + * by AddQual and friends, not here...) */ if (parsetree->hasSubLinks) sub_action->hasSubLinks = TRUE; @@ -158,7 +152,7 @@ gatherRewriteMeta(Query *parsetree, * two queries one w/rule_qual, one w/NOT rule_qual. Also add user * query qual onto rule action */ - AddQual(sub_action, info->rule_qual); + AddQual(sub_action, rule_qual); AddQual(sub_action, parsetree->jointree->quals); @@ -168,23 +162,23 @@ gatherRewriteMeta(Query *parsetree, * * KLUGE ALERT: since ResolveNew returns a mutated copy, we can't just * apply it to sub_action; we have to remember to update the sublink - * inside info->rule_action, too. + * inside rule_action, too. */ - if (info->event == CMD_INSERT || info->event == CMD_UPDATE) + if (event == CMD_INSERT || event == CMD_UPDATE) { sub_action = (Query *) ResolveNew((Node *) sub_action, - info->new_varno, + new_varno, 0, parsetree->targetList, - info->event, - info->current_varno); + event, + current_varno); if (sub_action_ptr) *sub_action_ptr = sub_action; else - info->rule_action = sub_action; + rule_action = sub_action; } - return info; + return rule_action; } /* @@ -708,26 +702,14 @@ fireRules(Query *parsetree, foreach(r, actions) { Query *rule_action = lfirst(r); - RewriteInfo *info; if (rule_action->commandType == CMD_NOTHING) continue; - info = gatherRewriteMeta(parsetree, rule_action, event_qual, - rt_index, event, *instead_flag); - - /* handle escapable cases, or those handled by other code */ - if (info->nothing) - { - if (*instead_flag) - return NIL; - else - continue; - } - - results = lappend(results, info->rule_action); + rule_action = rewriteRuleAction(parsetree, rule_action, + event_qual, rt_index, event); - pfree(info); + results = lappend(results, rule_action); } /* diff --git a/src/include/rewrite/rewriteHandler.h b/src/include/rewrite/rewriteHandler.h index 0e38e9d719..0707d9a75b 100644 --- a/src/include/rewrite/rewriteHandler.h +++ b/src/include/rewrite/rewriteHandler.h @@ -1,13 +1,13 @@ /*------------------------------------------------------------------------- * * rewriteHandler.h - * + * External interface to query rewriter. * * * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: rewriteHandler.h,v 1.14 2001/01/24 19:43:27 momjian Exp $ + * $Id: rewriteHandler.h,v 1.15 2001/06/13 18:56:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -16,21 +16,7 @@ #include "nodes/parsenodes.h" -typedef struct RewriteInfo -{ - int rt_index; - bool instead_flag; - int event; - CmdType action; - int current_varno; - int new_varno; - Query *rule_action; - Node *rule_qual; - bool nothing; -} RewriteInfo; - extern List *QueryRewrite(Query *parsetree); - #endif /* REWRITEHANDLER_H */ diff --git a/src/include/rewrite/rewriteManip.h b/src/include/rewrite/rewriteManip.h index 6123eb1097..05f2fe2de3 100644 --- a/src/include/rewrite/rewriteManip.h +++ b/src/include/rewrite/rewriteManip.h @@ -1,22 +1,22 @@ /*------------------------------------------------------------------------- * * rewriteManip.h - * + * Querytree manipulation subroutines for query rewriter. * * * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: rewriteManip.h,v 1.26 2001/03/22 04:01:04 momjian Exp $ + * $Id: rewriteManip.h,v 1.27 2001/06/13 18:56:29 tgl Exp $ * *------------------------------------------------------------------------- */ #ifndef REWRITEMANIP_H #define REWRITEMANIP_H -#include "rewrite/rewriteHandler.h" +#include "nodes/parsenodes.h" + -/* RewriteManip.c */ extern void OffsetVarNodes(Node *node, int offset, int sublevels_up); extern void ChangeVarNodes(Node *node, int old_varno, int new_varno, int sublevels_up); -- 2.11.0