7
7
*
8
8
*
9
9
* 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 $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
@@ -255,12 +255,14 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
255
255
SubLink * sublink = (SubLink * ) expr ;
256
256
QueryTreeList * qtree ;
257
257
Query * subselect ;
258
-
259
- qtree = parse_analyze (lcons (sublink -> subselect ,NIL ), pstate );
258
+ List * llist ;
260
259
260
+ qtree = parse_analyze (lcons (sublink -> subselect ,NIL ), pstate );
261
261
Assert (qtree -> len == 1 );
262
-
263
262
sublink -> subselect = (Node * ) subselect = qtree -> qtrees [0 ];
263
+
264
+ foreach (llist , sublink -> lefthand )
265
+ lfirst (llist ) = transformExpr (pstate , lfirst (llist ), precedence );
264
266
265
267
if (length (sublink -> lefthand ) !=
266
268
length (subselect -> targetList ))
@@ -270,20 +272,22 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
270
272
{
271
273
char * op = lfirst (sublink -> oper );
272
274
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
+ }
287
291
result = (Node * ) expr ;
288
292
}
289
293
break ;
0 commit comments