Index: src/backend/rewrite/rewriteHandler.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v
retrieving revision 1.159
diff -c -r1.159 rewriteHandler.c
*** src/backend/rewrite/rewriteHandler.c	22 Nov 2005 18:17:19 -0000	1.159
--- src/backend/rewrite/rewriteHandler.c	23 Nov 2005 17:10:01 -0000
***************
*** 374,379 ****
--- 374,387 ----
  
  			sub_action->jointree->fromlist =
  				list_concat(newjointree, sub_action->jointree->fromlist);
+ 
+ 			/*
+ 			 * There could have been some SubLinks in newjointree, in which
+ 			 * case we'd better mark the sub_action correctly.
+ 			 */
+ 			if (parsetree->hasSubLinks && !sub_action->hasSubLinks)
+ 				sub_action->hasSubLinks =
+ 					checkExprHasSubLink((Node *) newjointree);
  		}
  	}
  
Index: src/backend/rewrite/rewriteManip.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v
retrieving revision 1.93
diff -c -r1.93 rewriteManip.c
*** src/backend/rewrite/rewriteManip.c	22 Nov 2005 18:17:19 -0000	1.93
--- src/backend/rewrite/rewriteManip.c	23 Nov 2005 17:10:01 -0000
***************
*** 930,935 ****
--- 930,936 ----
  		   RangeTblEntry *target_rte,
  		   List *targetlist, int event, int update_varno)
  {
+ 	Node	   *result;
  	ResolveNew_context context;
  
  	context.target_varno = target_varno;
***************
*** 944,951 ****
  	 * Must be prepared to start with a Query or a bare expression tree; if
  	 * it's a Query, we don't want to increment sublevels_up.
  	 */
! 	return query_or_expression_tree_mutator(node,
! 											ResolveNew_mutator,
! 											(void *) &context,
! 											0);
  }
--- 945,965 ----
  	 * Must be prepared to start with a Query or a bare expression tree; if
  	 * it's a Query, we don't want to increment sublevels_up.
  	 */
! 	result = query_or_expression_tree_mutator(node,
! 											  ResolveNew_mutator,
! 											  (void *) &context,
! 											  0);
! 
! 	if (context.inserted_sublink)
! 	{
! 		if (IsA(result, Query))
! 			((Query *) result)->hasSubLinks = true;
! 		/*
! 		 * Note: if we're called on a non-Query node then it's the caller's
! 		 * responsibility to update hasSubLinks in the ancestor Query.
! 		 * This is pretty fragile and perhaps should be rethought ...
! 		 */
! 	}
! 
! 	return result;
  }
