|
|
|
@ -8,7 +8,7 @@ |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* IDENTIFICATION |
|
|
|
|
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.140 2003/01/10 21:08:15 tgl Exp $ |
|
|
|
|
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.141 2003/01/13 00:18:51 tgl Exp $ |
|
|
|
|
* |
|
|
|
|
*------------------------------------------------------------------------- |
|
|
|
|
*/ |
|
|
|
@ -20,6 +20,7 @@ |
|
|
|
|
#include "miscadmin.h" |
|
|
|
|
#include "nodes/makefuncs.h" |
|
|
|
|
#include "nodes/params.h" |
|
|
|
|
#include "nodes/plannodes.h" |
|
|
|
|
#include "parser/analyze.h" |
|
|
|
|
#include "parser/gramparse.h" |
|
|
|
|
#include "parser/parse.h" |
|
|
|
@ -962,6 +963,7 @@ exprType(Node *expr) |
|
|
|
|
elog(ERROR, "exprType: Cannot get type for untransformed sublink"); |
|
|
|
|
tent = (TargetEntry *) lfirst(qtree->targetList); |
|
|
|
|
Assert(IsA(tent, TargetEntry)); |
|
|
|
|
Assert(!tent->resdom->resjunk); |
|
|
|
|
type = tent->resdom->restype; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
@ -971,6 +973,32 @@ exprType(Node *expr) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case T_SubPlan: |
|
|
|
|
{ |
|
|
|
|
/*
|
|
|
|
|
* Although the parser does not ever deal with already-planned |
|
|
|
|
* expression trees, we support SubPlan nodes in this routine |
|
|
|
|
* for the convenience of ruleutils.c. |
|
|
|
|
*/ |
|
|
|
|
SubPlan *subplan = (SubPlan *) expr; |
|
|
|
|
|
|
|
|
|
if (subplan->subLinkType == EXPR_SUBLINK) |
|
|
|
|
{ |
|
|
|
|
/* get the type of the subselect's first target column */ |
|
|
|
|
TargetEntry *tent; |
|
|
|
|
|
|
|
|
|
tent = (TargetEntry *) lfirst(subplan->plan->targetlist); |
|
|
|
|
Assert(IsA(tent, TargetEntry)); |
|
|
|
|
Assert(!tent->resdom->resjunk); |
|
|
|
|
type = tent->resdom->restype; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
/* for all other subplan types, result is boolean */ |
|
|
|
|
type = BOOLOID; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case T_FieldSelect: |
|
|
|
|
type = ((FieldSelect *) expr)->resulttype; |
|
|
|
|
break; |
|
|
|
|