diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index e0d2b515526a4a72e1bac530136f6cfb2fcf8d45..bece816a7f47f717ea19d6c13daa87bfa5165772 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.99 2001/02/14 21:35:04 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.100 2001/03/14 23:55:33 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -319,7 +319,8 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
 				 * A projection must match an attribute name of the rel.
 				 */
 				if (get_attnum(argrelid, funcname) == InvalidAttrNumber)
-					elog(ERROR, "Functions on sets are not yet supported");
+					elog(ERROR, "No such attribute or function '%s'",
+						 funcname);
 			}
 
 			if (retval)
@@ -448,8 +449,15 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
 			}
 			else if (IsA(rteorjoin, JoinExpr))
 			{
-				elog(ERROR,
-					 "function applied to tuple is not supported for joins");
+				/*
+				 * We have f(x) or more likely x.f where x is a join and f
+				 * is not one of the attribute names of the join (else we'd
+				 * have recognized it above).  We don't support functions on
+				 * join tuples (since we don't have a named type for the join
+				 * tuples), so error out.
+				 */
+				elog(ERROR, "No such attribute or function %s.%s",
+					 refname, funcname);
 				rte = NULL;		/* keep compiler quiet */
 			}
 			else
@@ -471,8 +479,12 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
 			 * not an Oid.
 			 */
 			if (rte->relname == NULL)
-				elog(ERROR,
-					 "function applied to tuple is not supported for subSELECTs");
+			{
+				/* Here, we have an unrecognized attribute of a sub-select */
+				elog(ERROR, "No such attribute or function %s.%s",
+					 refname, funcname);
+			}
+
 			toid = typenameTypeId(rte->relname);
 
 			/* replace it in the arg list */