Give a more reasonable error message for a bad attribute name applied
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 14 Mar 2001 23:55:33 +0000 (23:55 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 14 Mar 2001 23:55:33 +0000 (23:55 +0000)
to a join or subselect alias ... cf. Oliver Elphick's complaint 13-Mar.

src/backend/parser/parse_func.c

index e0d2b515526a4a72e1bac530136f6cfb2fcf8d45..bece816a7f47f717ea19d6c13daa87bfa5165772 100644 (file)
@@ -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 */