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) 1996-2002, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* 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
|
* leftmost select and common datatypes of topmost set operation. Also
|
||||||
* make lists of the dummy vars and their names for use in parsing
|
* make lists of the dummy vars and their names for use in parsing
|
||||||
* ORDER BY.
|
* 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;
|
qry->targetList = NIL;
|
||||||
targetvars = NIL;
|
targetvars = NIL;
|
||||||
|
@ -1804,7 +1809,7 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
|
||||||
-1,
|
-1,
|
||||||
colName,
|
colName,
|
||||||
false);
|
false);
|
||||||
expr = (Expr *) makeVar(1,
|
expr = (Expr *) makeVar(leftmostRTI,
|
||||||
leftResdom->resno,
|
leftResdom->resno,
|
||||||
colType,
|
colType,
|
||||||
-1,
|
-1,
|
||||||
|
@ -1871,7 +1876,7 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
|
||||||
NULL,
|
NULL,
|
||||||
true);
|
true);
|
||||||
jrtr = makeNode(RangeTblRef);
|
jrtr = makeNode(RangeTblRef);
|
||||||
jrtr->rtindex = 1;
|
jrtr->rtindex = 1; /* only entry in dummy rtable */
|
||||||
|
|
||||||
sv_rtable = pstate->p_rtable;
|
sv_rtable = pstate->p_rtable;
|
||||||
pstate->p_rtable = makeList1(jrte);
|
pstate->p_rtable = makeList1(jrte);
|
||||||
|
|
Loading…
Reference in New Issue