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...
This commit is contained in:
Tom Lane 2000-03-23 07:36:03 +00:00
parent 9da6d2c0e7
commit dadb14fa60
1 changed files with 10 additions and 5 deletions

View 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):