]> granicus.if.org Git - postgresql/commitdiff
Hack parse_coerce so it won't try to constant-fold the dummy Const
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 23 Mar 2000 07:36:03 +0000 (07:36 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
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):