@@ -232,7 +232,7 @@ interpret_function_parameter_list(ParseState *pstate,
232232 if (fpmode == FUNC_PARAM_DEFAULT )
233233 fpmode = FUNC_PARAM_IN ;
234234
235- typtup = LookupTypeName (NULL , t , NULL , false);
235+ typtup = LookupTypeName (pstate , t , NULL , false);
236236 if (typtup )
237237 {
238238 if (!((Form_pg_type ) GETSTRUCT (typtup ))-> typisdefined )
@@ -242,18 +242,21 @@ interpret_function_parameter_list(ParseState *pstate,
242242 ereport (ERROR ,
243243 (errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
244244 errmsg ("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 */
247248 else if (objtype == OBJECT_AGGREGATE )
248249 ereport (ERROR ,
249250 (errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
250251 errmsg ("aggregate cannot accept shell type %s" ,
251- TypeNameToString (t ))));
252+ TypeNameToString (t )),
253+ parser_errposition (pstate , t -> location )));
252254 else
253255 ereport (NOTICE ,
254256 (errcode (ERRCODE_WRONG_OBJECT_TYPE ),
255257 errmsg ("argument type %s is only a shell" ,
256- TypeNameToString (t ))));
258+ TypeNameToString (t )),
259+ parser_errposition (pstate , t -> location )));
257260 }
258261 toid = typeTypeId (typtup );
259262 ReleaseSysCache (typtup );
@@ -263,7 +266,8 @@ interpret_function_parameter_list(ParseState *pstate,
263266 ereport (ERROR ,
264267 (errcode (ERRCODE_UNDEFINED_OBJECT ),
265268 errmsg ("type %s does not exist" ,
266- TypeNameToString (t ))));
269+ TypeNameToString (t )),
270+ parser_errposition (pstate , t -> location )));
267271 toid = InvalidOid ; /* keep compiler quiet */
268272 }
269273
@@ -276,15 +280,18 @@ interpret_function_parameter_list(ParseState *pstate,
276280 if (objtype == OBJECT_AGGREGATE )
277281 ereport (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 )));
280285 else if (objtype == OBJECT_PROCEDURE )
281286 ereport (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 )));
284290 else
285291 ereport (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,
294301 if (varCount > 0 )
295302 ereport (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 )));
298306 inTypes [inCount ++ ] = toid ;
299307 isinput = true;
300308 if (parameterTypes_list )
@@ -314,7 +322,8 @@ interpret_function_parameter_list(ParseState *pstate,
314322 if (varCount > 0 )
315323 ereport (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,
339348 if (!OidIsValid (get_element_type (toid )))
340349 ereport (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 )));
343353 break ;
344354 }
345355 }
@@ -385,7 +395,8 @@ interpret_function_parameter_list(ParseState *pstate,
385395 ereport (ERROR ,
386396 (errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
387397 errmsg ("parameter name \"%s\" used more than once" ,
388- fp -> name )));
398+ fp -> name ),
399+ parser_errposition (pstate , fp -> location )));
389400 }
390401
391402 paramNames [i ] = CStringGetTextDatum (fp -> name );
@@ -402,7 +413,8 @@ interpret_function_parameter_list(ParseState *pstate,
402413 if (!isinput )
403414 ereport (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
407419 def = transformExpr (pstate , fp -> defexpr ,
408420 EXPR_KIND_FUNCTION_DEFAULT );
@@ -417,7 +429,8 @@ interpret_function_parameter_list(ParseState *pstate,
417429 contain_var_clause (def ))
418430 ereport (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,
441454 if (isinput && have_defaults )
442455 ereport (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,
451465 if (objtype == OBJECT_PROCEDURE && have_defaults )
452466 ereport (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
457472 i ++ ;
0 commit comments