Hack parse_coerce so it won't try to constant-fold the dummy Const
authorTom Lane
Thu, 23 Mar 2000 07:36:03 +0000 (07:36 +0000)
committerTom Lane
Thu, 23 Mar 2000 07:36:03 +0000 (07:36 +0000)
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

index c7cbcd37d4375d54f51d6a24fcab5ec4c7fcf6c4..70b2d13aa5b51860f4c457fcd5d7d1280c672075 100644 (file)
@@ -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):