diff options
author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1998-02-13 08:10:33 +0000 |
---|---|---|
committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1998-02-13 08:10:33 +0000 |
commit | 6eeb3d9eac7099bdb30117ed9191d8abc5256cf9 (patch) | |
tree | d9bcf265da10f531dc5c499b96c3b97cbf5187ed /src/backend/parser/parse_expr.c | |
parent | 64e7adb07b252ba4b6d6990bf6dad2105e072105 (diff) | |
download | postgresql-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.c | 15 |
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); } |