aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_func.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/parse_func.c')
-rw-r--r--src/backend/parser/parse_func.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index cb4914849b4..e0d2b515526 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.98 2001/01/24 19:43:02 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.99 2001/02/14 21:35:04 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -427,6 +427,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
{
RangeTblEntry *rte;
int vnum;
+ Node *rteorjoin;
int sublevels_up;
/*
@@ -434,9 +435,29 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
*/
refname = ((Ident *) arg)->name;
- rte = refnameRangeTableEntry(pstate, refname);
- if (rte == NULL)
+ rteorjoin = refnameRangeOrJoinEntry(pstate, refname,
+ &sublevels_up);
+
+ if (rteorjoin == NULL)
+ {
rte = addImplicitRTE(pstate, refname);
+ }
+ else if (IsA(rteorjoin, RangeTblEntry))
+ {
+ rte = (RangeTblEntry *) rteorjoin;
+ }
+ else if (IsA(rteorjoin, JoinExpr))
+ {
+ elog(ERROR,
+ "function applied to tuple is not supported for joins");
+ rte = NULL; /* keep compiler quiet */
+ }
+ else
+ {
+ elog(ERROR, "ParseFuncOrColumn: unexpected node type %d",
+ nodeTag(rteorjoin));
+ rte = NULL; /* keep compiler quiet */
+ }
vnum = RTERangeTablePosn(pstate, rte, &sublevels_up);