diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index 834cc8c25713e6556450bccf8df10340dcf590e2..3f12cbd2c3a820c0639faa99c1541d2e638bc82b 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.32 1998/01/17 04:53:07 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.33 1998/01/19 18:10:48 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -908,7 +908,7 @@ _copySubLink(SubLink *from)
 	newnode->subLinkType = from->subLinkType;
 	newnode->useor = from->useor;
 	Node_Copy(from, newnode, lefthand);
-	Node_Copy(from, newnode, oper);
+	newnode->oper = listCopy(from->oper);
 	Node_Copy(from, newnode, subselect);
 
 	return newnode;
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 63c2ffef434a8d1997e03e02a229414a288aebc6..23f6372866275b3f2736d8982279422ac43943dc 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.23 1998/01/17 04:53:09 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.24 1998/01/19 18:10:50 momjian Exp $
  *
  * NOTES
  *	  Every (plan) node in POSTGRES has an associated "out" routine which
@@ -771,7 +771,7 @@ _outSubLink(StringInfo str, SubLink *node)
 	appendStringInfo(str, " :lefthand ");
 	_outNode(str, node->lefthand);
 	appendStringInfo(str, " :oper ");
-	_outNode(str, node->oper);
+	_outIntList(str, node->oper);
 	appendStringInfo(str, " :subselect ");
 	_outNode(str, node->subselect);
 }
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index e2c458e293339eab88c711f480d991ef503b4102..297cdec1418ab5eb202055b87c6a41ca47fc1dea 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.19 1998/01/17 04:53:11 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.20 1998/01/19 18:10:52 momjian Exp $
  *
  * NOTES
  *	  Most of the read functions for plan nodes are tested. (In fact, they
@@ -1182,7 +1182,7 @@ _readSubLink()
 	local_node->lefthand = nodeRead(true);		/* now read it */
 
 	token = lsptok(NULL, &length);		/* eat :oper */
-	local_node->oper = nodeRead(true);		/* now read it */
+	local_node->oper = toIntList(nodeRead(true));		/* now read it */
 
 	token = lsptok(NULL, &length);		/* eat :subselect */
 	local_node->subselect = nodeRead(true);		/* now read it */
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index 6dab88c12cda98366ee6da450b25d40f966e6c8f..e321a8517e5c401b29c0660299a0905555a554b0 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;
diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h
index 531e5e9052bb4961d838b53ffc54b09f1c63994d..92c2ab00f399adc79811f8df07033d89de59a429 100644
--- a/src/include/nodes/primnodes.h
+++ b/src/include/nodes/primnodes.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: primnodes.h,v 1.14 1998/01/19 05:06:36 momjian Exp $
+ * $Id: primnodes.h,v 1.15 1998/01/19 18:11:10 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -287,7 +287,6 @@ typedef enum SubLinkType
 
 typedef struct SubLink
 {
-struct Query;
 	NodeTag		type;
 	SubLinkType	subLinkType;
 	bool		useor;