88 *
99 *
1010 * IDENTIFICATION
11- * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.137 2002/09/18 21:35:22 tgl Exp $
11+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.138 2002/10/19 21:23:20 tgl Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -191,9 +191,33 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
191191if (!OidIsValid (toid ))
192192elog (ERROR ,"Cannot find type OID for relation %u" ,
193193rte -> relid );
194+ /* replace RangeVar in the arg list */
195+ lfirst (i )= makeVar (vnum ,
196+ InvalidAttrNumber ,
197+ toid ,
198+ sizeof (Pointer ),
199+ sublevels_up );
194200break ;
195201case RTE_FUNCTION :
196202toid = exprType (rte -> funcexpr );
203+ if (get_typtype (toid )== 'c' )
204+ {
205+ /* func returns composite; same as relation case */
206+ lfirst (i )= makeVar (vnum ,
207+ InvalidAttrNumber ,
208+ toid ,
209+ sizeof (Pointer ),
210+ sublevels_up );
211+ }
212+ else
213+ {
214+ /* func returns scalar; use attno 1 instead */
215+ lfirst (i )= makeVar (vnum ,
216+ 1 ,
217+ toid ,
218+ -1 ,
219+ sublevels_up );
220+ }
197221break ;
198222default :
199223
@@ -210,13 +234,6 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
210234toid = InvalidOid ;/* keep compiler quiet */
211235break ;
212236}
213-
214- /* replace RangeVar in the arg list */
215- lfirst (i )= makeVar (vnum ,
216- InvalidAttrNumber ,
217- toid ,
218- sizeof (Pointer ),
219- sublevels_up );
220237}
221238else
222239toid = exprType (arg );