aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_expr.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-01-19 18:11:10 +0000
committerBruce Momjian <bruce@momjian.us>1998-01-19 18:11:10 +0000
commit1316113ea366315961c214282fb7f5e6cc94affa (patch)
treef49262a39746c99c3abab5014f1ce24b5b96a0e8 /src/backend/parser/parse_expr.c
parent3d24e75176cf93a109392e9a9449b47c9dc58330 (diff)
downloadpostgresql-1316113ea366315961c214282fb7f5e6cc94affa.tar.gz
postgresql-1316113ea366315961c214282fb7f5e6cc94affa.zip
Fix problem with nodes handling.
Diffstat (limited to 'src/backend/parser/parse_expr.c')
-rw-r--r--src/backend/parser/parse_expr.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index 6dab88c12cd..e321a8517e5 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.9 1998/01/19 05:48:36 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.10 1998/01/19 18:10:56 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -255,12 +255,14 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
SubLink *sublink = (SubLink *) expr;
QueryTreeList *qtree;
Query *subselect;
-
- qtree = parse_analyze(lcons(sublink->subselect,NIL), pstate);
+ List *llist;
+ qtree = parse_analyze(lcons(sublink->subselect,NIL), pstate);
Assert(qtree->len == 1);
-
sublink->subselect = (Node *) subselect = qtree->qtrees[0];
+
+ foreach(llist, sublink->lefthand)
+ lfirst(llist) = transformExpr(pstate, lfirst(llist), precedence);
if (length(sublink->lefthand) !=
length(subselect->targetList))
@@ -270,20 +272,22 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
{
char *op = lfirst(sublink->oper);
List *left_expr = sublink->lefthand;
- List *right_expr = subselect->targetList;
- List *elist;
-
- foreach(elist, left_expr)
- {
- Node *lexpr = transformExpr(pstate, lfirst(elist), precedence);
- Node *rexpr = lfirst(right_expr);
- TargetEntry *tent = (TargetEntry *)rexpr;
- Expr *op_expr;
-
- op_expr = make_op(op, lexpr, tent->expr);
- sublink->oper = lappend(sublink->oper, op_expr->oper);
- right_expr = lnext(right_expr);
- }
+ List *right_expr = subselect->targetList;
+ List *elist;
+
+ sublink->oper = NIL;
+ foreach(elist, left_expr)
+ {
+ Node *lexpr = lfirst(elist);
+ Node *rexpr = lfirst(right_expr);
+ TargetEntry *tent = (TargetEntry *)rexpr;
+ Expr *op_expr;
+
+ op_expr = make_op(op, lexpr, tent->expr);
+ sublink->oper = lappendi(sublink->oper,
+ ((Oper *)op_expr->oper)->opno);
+ right_expr = lnext(right_expr);
+ }
result = (Node *) expr;
}
break;