8
8
*
9
9
*
10
10
* 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 $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
@@ -191,9 +191,33 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
191
191
if (!OidIsValid (toid ))
192
192
elog (ERROR ,"Cannot find type OID for relation %u" ,
193
193
rte -> relid );
194
+ /* replace RangeVar in the arg list */
195
+ lfirst (i )= makeVar (vnum ,
196
+ InvalidAttrNumber ,
197
+ toid ,
198
+ sizeof (Pointer ),
199
+ sublevels_up );
194
200
break ;
195
201
case RTE_FUNCTION :
196
202
toid = 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
+ }
197
221
break ;
198
222
default :
199
223
@@ -210,13 +234,6 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
210
234
toid = InvalidOid ;/* keep compiler quiet */
211
235
break ;
212
236
}
213
-
214
- /* replace RangeVar in the arg list */
215
- lfirst (i )= makeVar (vnum ,
216
- InvalidAttrNumber ,
217
- toid ,
218
- sizeof (Pointer ),
219
- sublevels_up );
220
237
}
221
238
else
222
239
toid = exprType (arg );