diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c
index 3f99e2c66d67e4370f4146aacd4c7e9e6303212f..a39e3108804286ab3d44e6cc3b15e73906014aa1 100644
--- a/src/backend/parser/parse_target.c
+++ b/src/backend/parser/parse_target.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.71 2001/09/10 14:53:10 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.72 2001/09/17 01:06:36 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -26,7 +26,7 @@
 
 
 static List *ExpandAllTables(ParseState *pstate);
-static char *FigureColname(Node *expr, Node *resval);
+static char *FigureColname(Node *node);
 
 
 /*
@@ -64,12 +64,11 @@ transformTargetEntry(ParseState *pstate,
 
 	if (colname == NULL)
 	{
-
 		/*
 		 * Generate a suitable column name for a column without any
 		 * explicit 'AS ColumnName' clause.
 		 */
-		colname = FigureColname(expr, node);
+		colname = FigureColname(node);
 	}
 
 	resnode = makeResdom((AttrNumber) pstate->p_last_resno++,
@@ -455,21 +454,21 @@ ExpandAllTables(ParseState *pstate)
  *	  list, we have to guess a suitable name.  The SQL spec provides some
  *	  guidance, but not much...
  *
+ * Note that the argument is the *untransformed* parse tree for the target
+ * item.  This is a shade easier to work with than the transformed tree.
  */
 static char *
-FigureColname(Node *expr, Node *resval)
+FigureColname(Node *node)
 {
-	/* Some of these are easiest to do with the untransformed node */
-	switch (nodeTag(resval))
+	if (node == NULL)
+		return "?column?";
+	switch (nodeTag(node))
 	{
-		case T_TypeCast: 
-			return( ( ((Ident *) ((TypeCast *) resval)->arg)->name));
-			
 		case T_Ident:
-			return ((Ident *) resval)->name;
+			return ((Ident *) node)->name;
 		case T_Attr:
 			{
-				List	   *attrs = ((Attr *) resval)->attrs;
+				List	   *attrs = ((Attr *) node)->attrs;
 
 				if (attrs)
 				{
@@ -479,23 +478,15 @@ FigureColname(Node *expr, Node *resval)
 				}
 			}
 			break;
-		default:
-			break;
-	}
-	/* Otherwise, work with the transformed node */
-	switch (nodeTag(expr))
-	{
-		case T_Expr:
-			if (((Expr *) expr)->opType == FUNC_EXPR && IsA(resval, FuncCall))
-				return ((FuncCall *) resval)->funcname;
-			break;
-		case T_Aggref:
-			return ((Aggref *) expr)->aggname;
+		case T_FuncCall:
+			return ((FuncCall *) node)->funcname;
+		case T_TypeCast: 
+			return FigureColname(((TypeCast *) node)->arg);
 		case T_CaseExpr:
 			{
 				char	   *name;
 
-				name = FigureColname(((CaseExpr *) expr)->defresult, resval);
+				name = FigureColname(((CaseExpr *) node)->defresult);
 				if (strcmp(name, "?column?") == 0)
 					name = "case";
 				return name;
@@ -504,6 +495,5 @@ FigureColname(Node *expr, Node *resval)
 		default:
 			break;
 	}
-
 	return "?column?";
 }