From dadb14fa60f2cb5c5acbd10faaf72aacc3cef56d Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu, 23 Mar 2000 07:36:03 +0000
Subject: [PATCH] Hack parse_coerce so it won't try to constant-fold the dummy
 Const nodes introduced by make_subplan().  It'd be better if we used a
 different node type for subplan result placeholders, but for now...

---
 src/backend/parser/parse_coerce.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c
index c7cbcd37d43..70b2d13aa5b 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):
-- 
GitLab