@@ -232,7 +232,7 @@ interpret_function_parameter_list(ParseState *pstate,
232232if (fpmode == FUNC_PARAM_DEFAULT )
233233fpmode = FUNC_PARAM_IN ;
234234
235- typtup = LookupTypeName (NULL ,t ,NULL , false);
235+ typtup = LookupTypeName (pstate ,t ,NULL , false);
236236if (typtup )
237237{
238238if (!((Form_pg_type )GETSTRUCT (typtup ))-> typisdefined )
@@ -242,18 +242,21 @@ interpret_function_parameter_list(ParseState *pstate,
242242ereport (ERROR ,
243243(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
244244errmsg ("SQL function cannot accept shell type %s" ,
245- TypeNameToString (t ))));
245+ TypeNameToString (t )),
246+ parser_errposition (pstate ,t -> location )));
246247/* We don't allow creating aggregates on shell types either */
247248else if (objtype == OBJECT_AGGREGATE )
248249ereport (ERROR ,
249250(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
250251errmsg ("aggregate cannot accept shell type %s" ,
251- TypeNameToString (t ))));
252+ TypeNameToString (t )),
253+ parser_errposition (pstate ,t -> location )));
252254else
253255ereport (NOTICE ,
254256(errcode (ERRCODE_WRONG_OBJECT_TYPE ),
255257errmsg ("argument type %s is only a shell" ,
256- TypeNameToString (t ))));
258+ TypeNameToString (t )),
259+ parser_errposition (pstate ,t -> location )));
257260}
258261toid = typeTypeId (typtup );
259262ReleaseSysCache (typtup );
@@ -263,7 +266,8 @@ interpret_function_parameter_list(ParseState *pstate,
263266ereport (ERROR ,
264267(errcode (ERRCODE_UNDEFINED_OBJECT ),
265268errmsg ("type %s does not exist" ,
266- TypeNameToString (t ))));
269+ TypeNameToString (t )),
270+ parser_errposition (pstate ,t -> location )));
267271toid = InvalidOid ;/* keep compiler quiet */
268272}
269273
@@ -276,15 +280,18 @@ interpret_function_parameter_list(ParseState *pstate,
276280if (objtype == OBJECT_AGGREGATE )
277281ereport (ERROR ,
278282(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
279- errmsg ("aggregates cannot accept set arguments" )));
283+ errmsg ("aggregates cannot accept set arguments" ),
284+ parser_errposition (pstate ,fp -> location )));
280285else if (objtype == OBJECT_PROCEDURE )
281286ereport (ERROR ,
282287(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
283- errmsg ("procedures cannot accept set arguments" )));
288+ errmsg ("procedures cannot accept set arguments" ),
289+ parser_errposition (pstate ,fp -> location )));
284290else
285291ereport (ERROR ,
286292(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
287- errmsg ("functions cannot accept set arguments" )));
293+ errmsg ("functions cannot accept set arguments" ),
294+ parser_errposition (pstate ,fp -> location )));
288295}
289296
290297/* handle input parameters */
@@ -294,7 +301,8 @@ interpret_function_parameter_list(ParseState *pstate,
294301if (varCount > 0 )
295302ereport (ERROR ,
296303(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
297- errmsg ("VARIADIC parameter must be the last input parameter" )));
304+ errmsg ("VARIADIC parameter must be the last input parameter" ),
305+ parser_errposition (pstate ,fp -> location )));
298306inTypes [inCount ++ ]= toid ;
299307isinput = true;
300308if (parameterTypes_list )
@@ -314,7 +322,8 @@ interpret_function_parameter_list(ParseState *pstate,
314322if (varCount > 0 )
315323ereport (ERROR ,
316324(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
317- errmsg ("VARIADIC parameter must be the last parameter" )));
325+ errmsg ("VARIADIC parameter must be the last parameter" ),
326+ parser_errposition (pstate ,fp -> location )));
318327/* Procedures with output parameters always return RECORD */
319328* requiredResultType = RECORDOID ;
320329}
@@ -339,7 +348,8 @@ interpret_function_parameter_list(ParseState *pstate,
339348if (!OidIsValid (get_element_type (toid )))
340349ereport (ERROR ,
341350(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
342- errmsg ("VARIADIC parameter must be an array" )));
351+ errmsg ("VARIADIC parameter must be an array" ),
352+ parser_errposition (pstate ,fp -> location )));
343353break ;
344354}
345355}
@@ -385,7 +395,8 @@ interpret_function_parameter_list(ParseState *pstate,
385395ereport (ERROR ,
386396(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
387397errmsg ("parameter name \"%s\" used more than once" ,
388- fp -> name )));
398+ fp -> name ),
399+ parser_errposition (pstate ,fp -> location )));
389400}
390401
391402paramNames [i ]= CStringGetTextDatum (fp -> name );
@@ -402,7 +413,8 @@ interpret_function_parameter_list(ParseState *pstate,
402413if (!isinput )
403414ereport (ERROR ,
404415(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
405- errmsg ("only input parameters can have default values" )));
416+ errmsg ("only input parameters can have default values" ),
417+ parser_errposition (pstate ,fp -> location )));
406418
407419def = transformExpr (pstate ,fp -> defexpr ,
408420EXPR_KIND_FUNCTION_DEFAULT );
@@ -417,7 +429,8 @@ interpret_function_parameter_list(ParseState *pstate,
417429contain_var_clause (def ))
418430ereport (ERROR ,
419431(errcode (ERRCODE_INVALID_COLUMN_REFERENCE ),
420- errmsg ("cannot use table references in parameter default value" )));
432+ errmsg ("cannot use table references in parameter default value" ),
433+ parser_errposition (pstate ,fp -> location )));
421434
422435/*
423436 * transformExpr() should have already rejected subqueries,
@@ -441,7 +454,8 @@ interpret_function_parameter_list(ParseState *pstate,
441454if (isinput && have_defaults )
442455ereport (ERROR ,
443456(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
444- errmsg ("input parameters after one with a default value must also have defaults" )));
457+ errmsg ("input parameters after one with a default value must also have defaults" ),
458+ parser_errposition (pstate ,fp -> location )));
445459
446460/*
447461 * For procedures, we also can't allow OUT parameters after one
@@ -451,7 +465,8 @@ interpret_function_parameter_list(ParseState *pstate,
451465if (objtype == OBJECT_PROCEDURE && have_defaults )
452466ereport (ERROR ,
453467(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
454- errmsg ("procedure OUT parameters cannot appear after one with a default value" )));
468+ errmsg ("procedure OUT parameters cannot appear after one with a default value" ),
469+ parser_errposition (pstate ,fp -> location )));
455470}
456471
457472i ++ ;