Use a varno not chosen at random for dummy variables in the top-level
targetlist of a set-operation tree. I'm not sure that this solution will really stand the test of time --- perhaps we need to make a special RTE for such vars to refer to. But this quick hack fixes Brandon Craig Rhodes' complaint of 10-Feb-02 about EXCEPT in CREATE RULE, while not changing any behavior in the better-tested cases where leftmostRTI is one anyway.
This commit is contained in:
parent
8a4fdce9f2
commit
9069a5fc33
|
@ -6,7 +6,7 @@
|
|||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.261 2003/02/09 06:56:28 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.262 2003/02/11 04:13:06 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -1786,6 +1786,11 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
|
|||
* leftmost select and common datatypes of topmost set operation. Also
|
||||
* make lists of the dummy vars and their names for use in parsing
|
||||
* ORDER BY.
|
||||
*
|
||||
* Note: we use leftmostRTI as the varno of the dummy variables.
|
||||
* It shouldn't matter too much which RT index they have, as long
|
||||
* as they have one that corresponds to a real RT entry; else funny
|
||||
* things may happen when the tree is mashed by rule rewriting.
|
||||
*/
|
||||
qry->targetList = NIL;
|
||||
targetvars = NIL;
|
||||
|
@ -1804,7 +1809,7 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
|
|||
-1,
|
||||
colName,
|
||||
false);
|
||||
expr = (Expr *) makeVar(1,
|
||||
expr = (Expr *) makeVar(leftmostRTI,
|
||||
leftResdom->resno,
|
||||
colType,
|
||||
-1,
|
||||
|
@ -1871,7 +1876,7 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
|
|||
NULL,
|
||||
true);
|
||||
jrtr = makeNode(RangeTblRef);
|
||||
jrtr->rtindex = 1;
|
||||
jrtr->rtindex = 1; /* only entry in dummy rtable */
|
||||
|
||||
sv_rtable = pstate->p_rtable;
|
||||
pstate->p_rtable = makeList1(jrte);
|
||||
|
|
Loading…
Reference in New Issue