diff options
-rw-r--r-- | src/backend/optimizer/path/allpaths.c | 24 | ||||
-rw-r--r-- | src/backend/optimizer/prep/prepjointree.c | 26 | ||||
-rw-r--r-- | src/backend/optimizer/util/plancat.c | 4 | ||||
-rw-r--r-- | src/backend/parser/parse_clause.c | 8 | ||||
-rw-r--r-- | src/backend/parser/parse_coerce.c | 9 | ||||
-rw-r--r-- | src/backend/parser/parse_relation.c | 41 | ||||
-rw-r--r-- | src/backend/parser/parse_target.c | 13 | ||||
-rw-r--r-- | src/backend/rewrite/rewriteHandler.c | 32 | ||||
-rw-r--r-- | src/backend/rewrite/rewriteManip.c | 18 | ||||
-rw-r--r-- | src/include/parser/parse_relation.h | 7 | ||||
-rw-r--r-- | src/include/rewrite/rewriteManip.h | 4 |
11 files changed, 92 insertions, 94 deletions
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 84544a20115..7e7666015a1 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.129 2005/04/28 21:47:13 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.130 2005/06/04 19:19:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -58,10 +58,10 @@ static void compare_tlist_datatypes(List *tlist, List *colTypes, bool *differentTypes); static bool qual_is_pushdown_safe(Query *subquery, Index rti, Node *qual, bool *differentTypes); -static void subquery_push_qual(Query *subquery, List *rtable, - Index rti, Node *qual); +static void subquery_push_qual(Query *subquery, + RangeTblEntry *rte, Index rti, Node *qual); static void recurse_push_qual(Node *setOp, Query *topquery, - List *rtable, Index rti, Node *qual); + RangeTblEntry *rte, Index rti, Node *qual); /* @@ -365,7 +365,7 @@ set_subquery_pathlist(Query *root, RelOptInfo *rel, if (qual_is_pushdown_safe(subquery, rti, clause, differentTypes)) { /* Push it down */ - subquery_push_qual(subquery, root->rtable, rti, clause); + subquery_push_qual(subquery, rte, rti, clause); } else { @@ -769,13 +769,13 @@ qual_is_pushdown_safe(Query *subquery, Index rti, Node *qual, * subquery_push_qual - push down a qual that we have determined is safe */ static void -subquery_push_qual(Query *subquery, List *rtable, Index rti, Node *qual) +subquery_push_qual(Query *subquery, RangeTblEntry *rte, Index rti, Node *qual) { if (subquery->setOperations != NULL) { /* Recurse to push it separately to each component query */ recurse_push_qual(subquery->setOperations, subquery, - rtable, rti, qual); + rte, rti, qual); } else { @@ -789,7 +789,7 @@ subquery_push_qual(Query *subquery, List *rtable, Index rti, Node *qual) * This step also ensures that when we are pushing into a setop tree, * each component query gets its own copy of the qual. */ - qual = ResolveNew(qual, rti, 0, rtable, + qual = ResolveNew(qual, rti, 0, rte, subquery->targetList, CMD_SELECT, 0); @@ -817,7 +817,7 @@ subquery_push_qual(Query *subquery, List *rtable, Index rti, Node *qual) */ static void recurse_push_qual(Node *setOp, Query *topquery, - List *rtable, Index rti, Node *qual) + RangeTblEntry *rte, Index rti, Node *qual) { if (IsA(setOp, RangeTblRef)) { @@ -826,14 +826,14 @@ recurse_push_qual(Node *setOp, Query *topquery, Query *subquery = subrte->subquery; Assert(subquery != NULL); - subquery_push_qual(subquery, rtable, rti, qual); + subquery_push_qual(subquery, rte, rti, qual); } else if (IsA(setOp, SetOperationStmt)) { SetOperationStmt *op = (SetOperationStmt *) setOp; - recurse_push_qual(op->larg, topquery, rtable, rti, qual); - recurse_push_qual(op->rarg, topquery, rtable, rti, qual); + recurse_push_qual(op->larg, topquery, rte, rti, qual); + recurse_push_qual(op->rarg, topquery, rte, rti, qual); } else { diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index b5b658cf58a..67f4e823d86 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -16,7 +16,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.27 2005/04/28 21:47:14 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.28 2005/06/04 19:19:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -46,7 +46,7 @@ typedef struct reduce_outer_joins_state static bool is_simple_subquery(Query *subquery); static bool has_nullable_targetlist(Query *subquery); static void resolvenew_in_jointree(Node *jtnode, int varno, - List *rtable, List *subtlist); + RangeTblEntry *rte, List *subtlist); static reduce_outer_joins_state *reduce_outer_joins_pass1(Node *jtnode); static void reduce_outer_joins_pass2(Node *jtnode, reduce_outer_joins_state *state, @@ -243,18 +243,18 @@ pull_up_subqueries(Query *parse, Node *jtnode, bool below_outer_join) subtlist = subquery->targetList; parse->targetList = (List *) ResolveNew((Node *) parse->targetList, - varno, 0, parse->rtable, + varno, 0, rte, subtlist, CMD_SELECT, 0); resolvenew_in_jointree((Node *) parse->jointree, varno, - parse->rtable, subtlist); + rte, subtlist); Assert(parse->setOperations == NULL); parse->havingQual = ResolveNew(parse->havingQual, - varno, 0, parse->rtable, + varno, 0, rte, subtlist, CMD_SELECT, 0); parse->in_info_list = (List *) ResolveNew((Node *) parse->in_info_list, - varno, 0, parse->rtable, + varno, 0, rte, subtlist, CMD_SELECT, 0); foreach(rt, parse->rtable) @@ -264,7 +264,7 @@ pull_up_subqueries(Query *parse, Node *jtnode, bool below_outer_join) if (otherrte->rtekind == RTE_JOIN) otherrte->joinaliasvars = (List *) ResolveNew((Node *) otherrte->joinaliasvars, - varno, 0, parse->rtable, + varno, 0, rte, subtlist, CMD_SELECT, 0); } @@ -492,7 +492,7 @@ has_nullable_targetlist(Query *subquery) */ static void resolvenew_in_jointree(Node *jtnode, int varno, - List *rtable, List *subtlist) + RangeTblEntry *rte, List *subtlist) { if (jtnode == NULL) return; @@ -506,19 +506,19 @@ resolvenew_in_jointree(Node *jtnode, int varno, ListCell *l; foreach(l, f->fromlist) - resolvenew_in_jointree(lfirst(l), varno, rtable, subtlist); + resolvenew_in_jointree(lfirst(l), varno, rte, subtlist); f->quals = ResolveNew(f->quals, - varno, 0, rtable, + varno, 0, rte, subtlist, CMD_SELECT, 0); } else if (IsA(jtnode, JoinExpr)) { JoinExpr *j = (JoinExpr *) jtnode; - resolvenew_in_jointree(j->larg, varno, rtable, subtlist); - resolvenew_in_jointree(j->rarg, varno, rtable, subtlist); + resolvenew_in_jointree(j->larg, varno, rte, subtlist); + resolvenew_in_jointree(j->rarg, varno, rte, subtlist); j->quals = ResolveNew(j->quals, - varno, 0, rtable, + varno, 0, rte, subtlist, CMD_SELECT, 0); /* diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 35277073569..a86bdbfb61d 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/util/plancat.c,v 1.109 2005/05/30 18:55:49 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/util/plancat.c,v 1.110 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -451,7 +451,7 @@ build_physical_tlist(Query *root, RelOptInfo *rel) break; case RTE_FUNCTION: - expandRTE(root->rtable, varno, 0, true /* include dropped */, + expandRTE(rte, varno, 0, true /* include dropped */, NULL, &colvars); foreach(l, colvars) { diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 42960d43760..8d282d13e4f 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.140 2005/04/13 16:50:55 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.141 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -663,7 +663,8 @@ transformFromClauseItem(ParseState *pstate, Node *n, List **containedRels) elog(ERROR, "unrecognized node type: %d", (int) nodeTag(j->larg)); leftrti = 0; /* keep compiler quiet */ } - expandRTE(pstate->p_rtable, leftrti, 0, false, + rte = rt_fetch(leftrti, pstate->p_rtable); + expandRTE(rte, leftrti, 0, false, &l_colnames, &l_colvars); if (IsA(j->rarg, RangeTblRef)) @@ -675,7 +676,8 @@ transformFromClauseItem(ParseState *pstate, Node *n, List **containedRels) elog(ERROR, "unrecognized node type: %d", (int) nodeTag(j->rarg)); rightrti = 0; /* keep compiler quiet */ } - expandRTE(pstate->p_rtable, rightrti, 0, false, + rte = rt_fetch(rightrti, pstate->p_rtable); + expandRTE(rte, rightrti, 0, false, &r_colnames, &r_colvars); /* diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c index e46b63f6d9f..32a20fc3622 100644 --- a/src/backend/parser/parse_coerce.c +++ b/src/backend/parser/parse_coerce.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.130 2005/05/30 01:20:49 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.131 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -695,10 +695,11 @@ coerce_record_to_complex(ParseState *pstate, Node *node, { int rtindex = ((Var *) node)->varno; int sublevels_up = ((Var *) node)->varlevelsup; - List *rtable; + RangeTblEntry *rte; - rtable = GetLevelNRangeTable(pstate, sublevels_up); - expandRTE(rtable, rtindex, sublevels_up, false, NULL, &args); + rte = GetRTEByRangeTablePosn(pstate, rtindex, sublevels_up); + expandRTE(rte, rtindex, sublevels_up, false, + NULL, &args); } else ereport(ERROR, diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index 25205d8894e..39d18ffbf8a 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/parse_relation.c,v 1.109 2005/06/03 23:05:28 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/parse_relation.c,v 1.110 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -446,27 +446,6 @@ GetRTEByRangeTablePosn(ParseState *pstate, } /* - * GetLevelNRangeTable - * Get the rangetable list for the N'th query level up from current. - */ -List * -GetLevelNRangeTable(ParseState *pstate, int sublevels_up) -{ - int index = 0; - - while (pstate != NULL) - { - if (index == sublevels_up) - return pstate->p_rtable; - index++; - pstate = pstate->parentParseState; - } - - elog(ERROR, "rangetable not found (internal error)"); - return NIL; /* keep compiler quiet */ -} - -/* * scanRTEForColumn * Search the column names of a single RTE for the given name. * If found, return an appropriate Var node, else return NULL. @@ -1202,19 +1181,19 @@ addImplicitRTE(ParseState *pstate, RangeVar *relation) * results. If include_dropped is TRUE then empty strings and NULL constants * (not Vars!) are returned for dropped columns. * - * The target RTE is the rtindex'th entry of rtable. - * sublevels_up is the varlevelsup value to use in the created Vars. + * rtindex and sublevels_up are the varno and varlevelsup values to use + * in the created Vars. Ordinarily rtindex should match the actual position + * of the RTE in its rangetable. * * The output lists go into *colnames and *colvars. * If only one of the two kinds of output list is needed, pass NULL for the * output pointer for the unwanted one. */ void -expandRTE(List *rtable, int rtindex, int sublevels_up, +expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up, bool include_dropped, List **colnames, List **colvars) { - RangeTblEntry *rte = rt_fetch(rtindex, rtable); int varattno; if (colnames) @@ -1490,9 +1469,14 @@ expandTupleDesc(TupleDesc tupdesc, Alias *eref, * expandRelAttrs - * Workhorse for "*" expansion: produce a list of targetentries * for the attributes of the rte + * + * As with expandRTE, rtindex/sublevels_up determine the varno/varlevelsup + * fields of the Vars produced. pstate->p_next_resno determines the resnos + * assigned to the TLEs. */ List * -expandRelAttrs(ParseState *pstate, List *rtable, int rtindex, int sublevels_up) +expandRelAttrs(ParseState *pstate, RangeTblEntry *rte, + int rtindex, int sublevels_up) { List *names, *vars; @@ -1500,7 +1484,8 @@ expandRelAttrs(ParseState *pstate, List *rtable, int rtindex, int sublevels_up) *var; List *te_list = NIL; - expandRTE(rtable, rtindex, sublevels_up, false, &names, &vars); + expandRTE(rte, rtindex, sublevels_up, false, + &names, &vars); forboth(name, names, var, vars) { diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c index 12acfb83029..27e818dcbe2 100644 --- a/src/backend/parser/parse_target.c +++ b/src/backend/parser/parse_target.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/parse_target.c,v 1.134 2005/05/31 01:03:23 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/parse_target.c,v 1.135 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -697,7 +697,6 @@ ExpandColumnRefStar(ParseState *pstate, ColumnRef *cref) RangeTblEntry *rte; int sublevels_up; int rtindex; - List *rtable; switch (numnames) { @@ -742,9 +741,8 @@ ExpandColumnRefStar(ParseState *pstate, ColumnRef *cref) relname)); rtindex = RTERangeTablePosn(pstate, rte, &sublevels_up); - rtable = GetLevelNRangeTable(pstate, sublevels_up); - return expandRelAttrs(pstate, rtable, rtindex, sublevels_up); + return expandRelAttrs(pstate, rte, rtindex, sublevels_up); } } @@ -789,8 +787,7 @@ ExpandAllTables(ParseState *pstate) found_table = true; target = list_concat(target, - expandRelAttrs(pstate, pstate->p_rtable, - rtindex, 0)); + expandRelAttrs(pstate, rte, rtindex, 0)); } /* Check for SELECT *; */ @@ -929,8 +926,8 @@ expandRecordVariable(ParseState *pstate, Var *var, int levelsup) *lvar; int i; - expandRTE(GetLevelNRangeTable(pstate, netlevelsup), - var->varno, 0, false, &names, &vars); + expandRTE(rte, var->varno, 0, false, + &names, &vars); tupleDesc = CreateTemplateTupleDesc(list_length(vars), false); i = 1; diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 3c267ccdcd2..b7a96922e94 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 - * $PostgreSQL: pgsql/src/backend/rewrite/rewriteHandler.c,v 1.153 2005/06/03 23:05:28 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/rewrite/rewriteHandler.c,v 1.154 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -106,6 +106,8 @@ AcquireRewriteLocks(Query *parsetree) Relation rel; LOCKMODE lockmode; List *newaliasvars; + Index curinputvarno; + RangeTblEntry *curinputrte; ListCell *ll; ++rt_index; @@ -140,8 +142,14 @@ AcquireRewriteLocks(Query *parsetree) * Scan the join's alias var list to see if any columns * have been dropped, and if so replace those Vars with * NULL Consts. + * + * Since a join has only two inputs, we can expect to + * see multiple references to the same input RTE; optimize + * away multiple fetches. */ newaliasvars = NIL; + curinputvarno = 0; + curinputrte = NULL; foreach(ll, rte->joinaliasvars) { Var *aliasvar = (Var *) lfirst(ll); @@ -165,12 +173,17 @@ AcquireRewriteLocks(Query *parsetree) * but it's OK to assume here.) */ Assert(aliasvar->varlevelsup == 0); - if (aliasvar->varno >= rt_index) - elog(ERROR, "unexpected varno %d in JOIN RTE %d", - aliasvar->varno, rt_index); - if (get_rte_attribute_is_dropped( - rt_fetch(aliasvar->varno, parsetree->rtable), - aliasvar->varattno)) + if (aliasvar->varno != curinputvarno) + { + curinputvarno = aliasvar->varno; + if (curinputvarno >= rt_index) + elog(ERROR, "unexpected varno %d in JOIN RTE %d", + curinputvarno, rt_index); + curinputrte = rt_fetch(curinputvarno, + parsetree->rtable); + } + if (get_rte_attribute_is_dropped(curinputrte, + aliasvar->varattno)) { /* * can't use vartype here, since that might be a @@ -386,7 +399,8 @@ rewriteRuleAction(Query *parsetree, sub_action = (Query *) ResolveNew((Node *) sub_action, new_varno, 0, - sub_action->rtable, + rt_fetch(new_varno, + sub_action->rtable), parsetree->targetList, event, current_varno); @@ -1206,7 +1220,7 @@ CopyAndAddInvertedQual(Query *parsetree, new_qual = ResolveNew(new_qual, PRS2_NEW_VARNO, 0, - parsetree->rtable, + rt_fetch(rt_index, parsetree->rtable), parsetree->targetList, event, rt_index); diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 71143e85e23..353e4ca76f3 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/rewrite/rewriteManip.c,v 1.90 2005/03/10 23:21:24 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/rewrite/rewriteManip.c,v 1.91 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -797,10 +797,9 @@ AddInvertedQual(Query *parsetree, Node *qual) * If not, we either change the unmatched Var's varno to update_varno * (when event == CMD_UPDATE) or replace it with a constant NULL. * - * The caller must also provide target_rtable, the rangetable containing - * the target relation (which must be described by the target_varno'th - * RTE in that list). This is needed to handle whole-row Vars referencing - * the target. We expand such Vars into RowExpr constructs. + * The caller must also provide target_rte, the RTE describing the target + * relation. This is needed to handle whole-row Vars referencing the target. + * We expand such Vars into RowExpr constructs. * * Note: the business with inserted_sublink is needed to update hasSubLinks * in subqueries when the replacement adds a subquery inside a subquery. @@ -813,7 +812,7 @@ typedef struct { int target_varno; int sublevels_up; - List *target_rtable; + RangeTblEntry *target_rte; List *targetlist; int event; int update_varno; @@ -885,7 +884,8 @@ ResolveNew_mutator(Node *node, ResolveNew_context *context) * include dummy items for dropped columns. If the var is * RECORD (ie, this is a JOIN), then omit dropped columns. */ - expandRTE(context->target_rtable, this_varno, this_varlevelsup, + expandRTE(context->target_rte, + this_varno, this_varlevelsup, (var->vartype != RECORDOID), NULL, &fields); /* Adjust the generated per-field Vars... */ @@ -929,14 +929,14 @@ ResolveNew_mutator(Node *node, ResolveNew_context *context) Node * ResolveNew(Node *node, int target_varno, int sublevels_up, - List *target_rtable, + RangeTblEntry *target_rte, List *targetlist, int event, int update_varno) { ResolveNew_context context; context.target_varno = target_varno; context.sublevels_up = sublevels_up; - context.target_rtable = target_rtable; + context.target_rte = target_rte; context.targetlist = targetlist; context.event = event; context.update_varno = update_varno; diff --git a/src/include/parser/parse_relation.h b/src/include/parser/parse_relation.h index 6d1d9232820..b74098e10c7 100644 --- a/src/include/parser/parse_relation.h +++ b/src/include/parser/parse_relation.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/parser/parse_relation.h,v 1.49 2005/04/13 16:50:55 tgl Exp $ + * $PostgreSQL: pgsql/src/include/parser/parse_relation.h,v 1.50 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -30,7 +30,6 @@ extern int RTERangeTablePosn(ParseState *pstate, extern RangeTblEntry *GetRTEByRangeTablePosn(ParseState *pstate, int varno, int sublevels_up); -extern List *GetLevelNRangeTable(ParseState *pstate, int sublevels_up); extern Node *scanRTEForColumn(ParseState *pstate, RangeTblEntry *rte, char *colname); extern Node *colNameToVar(ParseState *pstate, char *colname, bool localonly); @@ -67,10 +66,10 @@ extern RangeTblEntry *addRangeTableEntryForJoin(ParseState *pstate, extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte, bool addToJoinList, bool addToNameSpace); extern RangeTblEntry *addImplicitRTE(ParseState *pstate, RangeVar *relation); -extern void expandRTE(List *rtable, int rtindex, int sublevels_up, +extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up, bool include_dropped, List **colnames, List **colvars); -extern List *expandRelAttrs(ParseState *pstate, List *rtable, +extern List *expandRelAttrs(ParseState *pstate, RangeTblEntry *rte, int rtindex, int sublevels_up); extern int attnameAttNum(Relation rd, const char *attname, bool sysColOK); extern Name attnumAttName(Relation rd, int attid); diff --git a/src/include/rewrite/rewriteManip.h b/src/include/rewrite/rewriteManip.h index d53f72878ee..89392a23d1c 100644 --- a/src/include/rewrite/rewriteManip.h +++ b/src/include/rewrite/rewriteManip.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/rewrite/rewriteManip.h,v 1.40 2005/03/10 23:21:25 tgl Exp $ + * $PostgreSQL: pgsql/src/include/rewrite/rewriteManip.h,v 1.41 2005/06/04 19:19:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -37,7 +37,7 @@ extern bool checkExprHasAggs(Node *node); extern bool checkExprHasSubLink(Node *node); extern Node *ResolveNew(Node *node, int target_varno, int sublevels_up, - List *target_rtable, + RangeTblEntry *target_rte, List *targetlist, int event, int update_varno); #endif /* REWRITEMANIP_H */ |