aboutsummaryrefslogtreecommitdiff
path: root/src/backend/rewrite/rewriteHandler.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>1999-07-11 17:54:30 +0000
committerTom Lane <tgl@sss.pgh.pa.us>1999-07-11 17:54:30 +0000
commiteeaeb1bda86875bdc256755d35493e4614731ede (patch)
treecd726aee8899802e7fb469fdc18858b97aafcc6e /src/backend/rewrite/rewriteHandler.c
parentf8d856af2c36681db14e36b5de445cf36d1d1683 (diff)
downloadpostgresql-eeaeb1bda86875bdc256755d35493e4614731ede.tar.gz
postgresql-eeaeb1bda86875bdc256755d35493e4614731ede.zip
RewritePreprocessQuery tried to match resjunk targets against
result relation ... wrong ...
Diffstat (limited to 'src/backend/rewrite/rewriteHandler.c')
-rw-r--r--src/backend/rewrite/rewriteHandler.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index e14452ac726..b4cfe96f5bc 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -6,7 +6,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.47 1999/06/21 01:26:56 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.48 1999/07/11 17:54:30 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -2610,6 +2610,8 @@ RewritePreprocessQuery(Query *parsetree)
* target relation. FixNew() depends on it when replacing
* *new* references in a rule action by the expressions
* from the rewritten query.
+ * resjunk targets are somewhat arbitrarily given a resno of 0;
+ * this is to prevent FixNew() from matching them to var nodes.
* ----------
*/
if (parsetree->resultRelation > 0)
@@ -2617,8 +2619,6 @@ RewritePreprocessQuery(Query *parsetree)
RangeTblEntry *rte;
Relation rd;
List *tl;
- TargetEntry *tle;
- int resdomno;
rte = (RangeTblEntry *) nth(parsetree->resultRelation - 1,
parsetree->rtable);
@@ -2626,9 +2626,12 @@ RewritePreprocessQuery(Query *parsetree)
foreach(tl, parsetree->targetList)
{
- tle = (TargetEntry *) lfirst(tl);
- resdomno = attnameAttNum(rd, tle->resdom->resname);
- tle->resdom->resno = resdomno;
+ TargetEntry *tle = (TargetEntry *) lfirst(tl);
+
+ if (! tle->resdom->resjunk)
+ tle->resdom->resno = attnameAttNum(rd, tle->resdom->resname);
+ else
+ tle->resdom->resno = 0;
}
heap_close(rd);