aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeSubplan.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/nodeSubplan.c')
-rw-r--r--src/backend/executor/nodeSubplan.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/backend/executor/nodeSubplan.c b/src/backend/executor/nodeSubplan.c
index d21a4478c4c..ed09a0bc9f2 100644
--- a/src/backend/executor/nodeSubplan.c
+++ b/src/backend/executor/nodeSubplan.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/nodeSubplan.c,v 1.23 2000/03/21 04:20:45 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/nodeSubplan.c,v 1.24 2000/03/23 07:32:58 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -141,16 +141,28 @@ ExecSubPlan(SubPlan *node, List *pvar, ExprContext *econtext, bool *isNull)
/*
* The righthand side of the expression should be either a Const
- * or a function call taking a Const as arg (the function would
- * be a run-time type coercion inserted by the parser to get to
- * the input type needed by the operator). Find the Const node
- * and insert the actual righthand side value into it.
+ * or a function call or RelabelType node taking a Const as arg
+ * (these nodes represent run-time type coercions inserted by
+ * the parser to get to the input type needed by the operator).
+ * Find the Const node and insert the actual righthand-side value
+ * into it.
*/
if (! IsA(con, Const))
{
- Assert(IsA(con, Expr));
- con = lfirst(((Expr *) con)->args);
- Assert(IsA(con, Const));
+ switch (con->type)
+ {
+ case T_Expr:
+ con = lfirst(((Expr *) con)->args);
+ break;
+ case T_RelabelType:
+ con = (Const *) (((RelabelType *) con)->arg);
+ break;
+ default:
+ /* will fail below */
+ break;
+ }
+ if (! IsA(con, Const))
+ elog(ERROR, "ExecSubPlan: failed to find placeholder for subplan result");
}
con->constvalue = heap_getattr(tup, col, tdesc,
&(con->constisnull));