diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c
index c7cbcd37d4375d54f51d6a24fcab5ec4c7fcf6c4..70b2d13aa5b51860f4c457fcd5d7d1280c672075 100644
--- a/src/backend/parser/parse_coerce.c
+++ b/src/backend/parser/parse_coerce.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.39 2000/03/20 15:42:45 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.40 2000/03/23 07:36:03 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -38,8 +38,9 @@ coerce_type(ParseState *pstate, Node *node, Oid inputTypeId,
 {
 	Node	   *result;
 
-	if (targetTypeId == InvalidOid ||
-		targetTypeId == inputTypeId)
+	if (targetTypeId == inputTypeId ||
+		targetTypeId == InvalidOid ||
+		node == NULL)
 	{
 		/* no conversion needed */
 		result = node;
@@ -141,8 +142,13 @@ coerce_type(ParseState *pstate, Node *node, Oid inputTypeId,
 		 *
 		 * Note that no folding will occur if the conversion function is
 		 * not marked 'iscachable'.
+		 *
+		 * HACK: if constant is NULL, don't fold it here.  This is needed
+		 * by make_subplan(), which calls this routine on placeholder Const
+		 * nodes that mustn't be collapsed.  (It'd be a lot cleaner to make
+		 * a separate node type for that purpose...)
 		 */
-		if (IsA(node, Const))
+		if (IsA(node, Const) && ! ((Const *) node)->constisnull)
 			result = eval_const_expressions(result);
 	}
 
@@ -614,7 +620,6 @@ PromoteLesserType(Oid inType1, Oid inType2, Oid *newType1, Oid *newType2)
 			{
 				case (BPCHAROID):
 				case (VARCHAROID):
-		case (BYTEA):
 				case (TEXTOID):
 
 				case (INT2OID):