aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_expr.c
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1998-02-13 08:10:33 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1998-02-13 08:10:33 +0000
commit6eeb3d9eac7099bdb30117ed9191d8abc5256cf9 (patch)
treed9bcf265da10f531dc5c499b96c3b97cbf5187ed /src/backend/parser/parse_expr.c
parent64e7adb07b252ba4b6d6990bf6dad2105e072105 (diff)
downloadpostgresql-6eeb3d9eac7099bdb30117ed9191d8abc5256cf9.tar.gz
postgresql-6eeb3d9eac7099bdb30117ed9191d8abc5256cf9.zip
gram.y: ALL_SUBLINK type was returned for x Op (subquery).
parse_expr.c: only Op of bool type are supported currently...
Diffstat (limited to 'src/backend/parser/parse_expr.c')
-rw-r--r--src/backend/parser/parse_expr.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index e27907a0246..8f0a959682e 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.20 1998/02/13 03:41:23 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.21 1998/02/13 08:10:33 vadim Exp $
*
*-------------------------------------------------------------------------
*/
@@ -264,7 +264,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
if (length(left_expr) !=
length(right_expr))
- elog(ERROR,"Subselect has too many or too few fields.");
+ elog(ERROR,"parser: Subselect has too many or too few fields.");
sublink->oper = NIL;
foreach(elist, left_expr)
@@ -275,6 +275,17 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
Expr *op_expr;
op_expr = make_op(op, lexpr, tent->expr);
+ /*
+ * HACK! Second IF is more valid but currently
+ * we don't support EXPR subqueries inside
+ * expressions generally, only in WHERE clauses.
+ * After fixing this, first IF must be removed.
+ */
+ if (op_expr->typeOid != BOOLOID)
+ elog (ERROR, "parser: '%s' must return 'bool' to be used with subquery", op);
+ if (op_expr->typeOid != BOOLOID &&
+ sublink->subLinkType != EXPR_SUBLINK)
+ elog (ERROR, "parser: '%s' must return 'bool' to be used with quantified predicate subquery", op);
sublink->oper = lappend(sublink->oper, op_expr);
right_expr = lnext(right_expr);
}