Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 1316113

Browse files
committed
Fix problem with nodes handling.
1 parent 3d24e75 commit 1316113

File tree

5 files changed

+29
-26
lines changed

5 files changed

+29
-26
lines changed

src/backend/nodes/copyfuncs.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.32 1998/01/17 04:53:07 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.33 1998/01/19 18:10:48 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -908,7 +908,7 @@ _copySubLink(SubLink *from)
908908
newnode->subLinkType = from->subLinkType;
909909
newnode->useor = from->useor;
910910
Node_Copy(from, newnode, lefthand);
911-
Node_Copy(from, newnode, oper);
911+
newnode->oper = listCopy(from->oper);
912912
Node_Copy(from, newnode, subselect);
913913

914914
return newnode;

src/backend/nodes/outfuncs.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.23 1998/01/17 04:53:09 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.24 1998/01/19 18:10:50 momjian Exp $
1111
*
1212
* NOTES
1313
* Every (plan) node in POSTGRES has an associated "out" routine which
@@ -771,7 +771,7 @@ _outSubLink(StringInfo str, SubLink *node)
771771
appendStringInfo(str, " :lefthand ");
772772
_outNode(str, node->lefthand);
773773
appendStringInfo(str, " :oper ");
774-
_outNode(str, node->oper);
774+
_outIntList(str, node->oper);
775775
appendStringInfo(str, " :subselect ");
776776
_outNode(str, node->subselect);
777777
}

src/backend/nodes/readfuncs.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.19 1998/01/17 04:53:11 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.20 1998/01/19 18:10:52 momjian Exp $
1111
*
1212
* NOTES
1313
* Most of the read functions for plan nodes are tested. (In fact, they
@@ -1182,7 +1182,7 @@ _readSubLink()
11821182
local_node->lefthand = nodeRead(true); /* now read it */
11831183

11841184
token = lsptok(NULL, &length); /* eat :oper */
1185-
local_node->oper = nodeRead(true); /* now read it */
1185+
local_node->oper = toIntList(nodeRead(true)); /* now read it */
11861186

11871187
token = lsptok(NULL, &length); /* eat :subselect */
11881188
local_node->subselect = nodeRead(true); /* now read it */

src/backend/parser/parse_expr.c

+22-18
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.9 1998/01/19 05:48:36 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.10 1998/01/19 18:10:56 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -255,12 +255,14 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
255255
SubLink *sublink = (SubLink *) expr;
256256
QueryTreeList *qtree;
257257
Query *subselect;
258-
259-
qtree = parse_analyze(lcons(sublink->subselect,NIL), pstate);
258+
List *llist;
260259

260+
qtree = parse_analyze(lcons(sublink->subselect,NIL), pstate);
261261
Assert(qtree->len == 1);
262-
263262
sublink->subselect = (Node *) subselect = qtree->qtrees[0];
263+
264+
foreach(llist, sublink->lefthand)
265+
lfirst(llist) = transformExpr(pstate, lfirst(llist), precedence);
264266

265267
if (length(sublink->lefthand) !=
266268
length(subselect->targetList))
@@ -270,20 +272,22 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
270272
{
271273
char *op = lfirst(sublink->oper);
272274
List *left_expr = sublink->lefthand;
273-
List *right_expr = subselect->targetList;
274-
List *elist;
275-
276-
foreach(elist, left_expr)
277-
{
278-
Node *lexpr = transformExpr(pstate, lfirst(elist), precedence);
279-
Node *rexpr = lfirst(right_expr);
280-
TargetEntry *tent = (TargetEntry *)rexpr;
281-
Expr *op_expr;
282-
283-
op_expr = make_op(op, lexpr, tent->expr);
284-
sublink->oper = lappend(sublink->oper, op_expr->oper);
285-
right_expr = lnext(right_expr);
286-
}
275+
List *right_expr = subselect->targetList;
276+
List *elist;
277+
278+
sublink->oper = NIL;
279+
foreach(elist, left_expr)
280+
{
281+
Node *lexpr = lfirst(elist);
282+
Node *rexpr = lfirst(right_expr);
283+
TargetEntry *tent = (TargetEntry *)rexpr;
284+
Expr *op_expr;
285+
286+
op_expr = make_op(op, lexpr, tent->expr);
287+
sublink->oper = lappendi(sublink->oper,
288+
((Oper *)op_expr->oper)->opno);
289+
right_expr = lnext(right_expr);
290+
}
287291
result = (Node *) expr;
288292
}
289293
break;

src/include/nodes/primnodes.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: primnodes.h,v 1.14 1998/01/19 05:06:36 momjian Exp $
9+
* $Id: primnodes.h,v 1.15 1998/01/19 18:11:10 momjian Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -287,7 +287,6 @@ typedef enum SubLinkType
287287

288288
typedef struct SubLink
289289
{
290-
struct Query;
291290
NodeTag type;
292291
SubLinkType subLinkType;
293292
bool useor;

0 commit comments

Comments
 (0)