aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-03-23 07:36:03 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-03-23 07:36:03 +0000
commitdadb14fa60f2cb5c5acbd10faaf72aacc3cef56d (patch)
tree60649b2fe904fde0cea9430d0dded41a165d6d78 /src
parent9da6d2c0e71a18cb3806ba6531d7aa233ab266ee (diff)
downloadpostgresql-dadb14fa60f2cb5c5acbd10faaf72aacc3cef56d.tar.gz
postgresql-dadb14fa60f2cb5c5acbd10faaf72aacc3cef56d.zip
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...
Diffstat (limited to 'src')
-rw-r--r--src/backend/parser/parse_coerce.c15
1 files 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):