@@ -232,7 +232,7 @@ interpret_function_parameter_list(ParseState *pstate,
232
232
if (fpmode == FUNC_PARAM_DEFAULT )
233
233
fpmode = FUNC_PARAM_IN ;
234
234
235
- typtup = LookupTypeName (NULL , t , NULL , false);
235
+ typtup = LookupTypeName (pstate , t , NULL , false);
236
236
if (typtup )
237
237
{
238
238
if (!((Form_pg_type ) GETSTRUCT (typtup ))-> typisdefined )
@@ -242,18 +242,21 @@ interpret_function_parameter_list(ParseState *pstate,
242
242
ereport (ERROR ,
243
243
(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
244
244
errmsg ("SQL function cannot accept shell type %s" ,
245
- TypeNameToString (t ))));
245
+ TypeNameToString (t )),
246
+ parser_errposition (pstate , t -> location )));
246
247
/* We don't allow creating aggregates on shell types either */
247
248
else if (objtype == OBJECT_AGGREGATE )
248
249
ereport (ERROR ,
249
250
(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
250
251
errmsg ("aggregate cannot accept shell type %s" ,
251
- TypeNameToString (t ))));
252
+ TypeNameToString (t )),
253
+ parser_errposition (pstate , t -> location )));
252
254
else
253
255
ereport (NOTICE ,
254
256
(errcode (ERRCODE_WRONG_OBJECT_TYPE ),
255
257
errmsg ("argument type %s is only a shell" ,
256
- TypeNameToString (t ))));
258
+ TypeNameToString (t )),
259
+ parser_errposition (pstate , t -> location )));
257
260
}
258
261
toid = typeTypeId (typtup );
259
262
ReleaseSysCache (typtup );
@@ -263,7 +266,8 @@ interpret_function_parameter_list(ParseState *pstate,
263
266
ereport (ERROR ,
264
267
(errcode (ERRCODE_UNDEFINED_OBJECT ),
265
268
errmsg ("type %s does not exist" ,
266
- TypeNameToString (t ))));
269
+ TypeNameToString (t )),
270
+ parser_errposition (pstate , t -> location )));
267
271
toid = InvalidOid ; /* keep compiler quiet */
268
272
}
269
273
@@ -276,15 +280,18 @@ interpret_function_parameter_list(ParseState *pstate,
276
280
if (objtype == OBJECT_AGGREGATE )
277
281
ereport (ERROR ,
278
282
(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 )));
280
285
else if (objtype == OBJECT_PROCEDURE )
281
286
ereport (ERROR ,
282
287
(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 )));
284
290
else
285
291
ereport (ERROR ,
286
292
(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 )));
288
295
}
289
296
290
297
/* handle input parameters */
@@ -294,7 +301,8 @@ interpret_function_parameter_list(ParseState *pstate,
294
301
if (varCount > 0 )
295
302
ereport (ERROR ,
296
303
(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 )));
298
306
inTypes [inCount ++ ] = toid ;
299
307
isinput = true;
300
308
if (parameterTypes_list )
@@ -314,7 +322,8 @@ interpret_function_parameter_list(ParseState *pstate,
314
322
if (varCount > 0 )
315
323
ereport (ERROR ,
316
324
(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 )));
318
327
/* Procedures with output parameters always return RECORD */
319
328
* requiredResultType = RECORDOID ;
320
329
}
@@ -339,7 +348,8 @@ interpret_function_parameter_list(ParseState *pstate,
339
348
if (!OidIsValid (get_element_type (toid )))
340
349
ereport (ERROR ,
341
350
(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 )));
343
353
break ;
344
354
}
345
355
}
@@ -385,7 +395,8 @@ interpret_function_parameter_list(ParseState *pstate,
385
395
ereport (ERROR ,
386
396
(errcode (ERRCODE_INVALID_FUNCTION_DEFINITION ),
387
397
errmsg ("parameter name \"%s\" used more than once" ,
388
- fp -> name )));
398
+ fp -> name ),
399
+ parser_errposition (pstate , fp -> location )));
389
400
}
390
401
391
402
paramNames [i ] = CStringGetTextDatum (fp -> name );
@@ -402,7 +413,8 @@ interpret_function_parameter_list(ParseState *pstate,
402
413
if (!isinput )
403
414
ereport (ERROR ,
404
415
(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 )));
406
418
407
419
def = transformExpr (pstate , fp -> defexpr ,
408
420
EXPR_KIND_FUNCTION_DEFAULT );
@@ -417,7 +429,8 @@ interpret_function_parameter_list(ParseState *pstate,
417
429
contain_var_clause (def ))
418
430
ereport (ERROR ,
419
431
(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 )));
421
434
422
435
/*
423
436
* transformExpr() should have already rejected subqueries,
@@ -441,7 +454,8 @@ interpret_function_parameter_list(ParseState *pstate,
441
454
if (isinput && have_defaults )
442
455
ereport (ERROR ,
443
456
(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 )));
445
459
446
460
/*
447
461
* For procedures, we also can't allow OUT parameters after one
@@ -451,7 +465,8 @@ interpret_function_parameter_list(ParseState *pstate,
451
465
if (objtype == OBJECT_PROCEDURE && have_defaults )
452
466
ereport (ERROR ,
453
467
(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 )));
455
470
}
456
471
457
472
i ++ ;
0 commit comments