@@ -285,6 +285,7 @@ do_compile(FunctionCallInfo fcinfo,
285
285
int * in_arg_varnos = NULL ;
286
286
PLpgSQL_variable * * out_arg_variables ;
287
287
MemoryContext func_cxt ;
288
+ PLpgSQL_trigtype fn_is_trigger ;
288
289
289
290
/*
290
291
* Setup the scanner input and error info. We assume that this function
@@ -352,11 +353,12 @@ do_compile(FunctionCallInfo fcinfo,
352
353
function -> resolve_option = plpgsql_variable_conflict ;
353
354
354
355
if (is_dml_trigger )
355
- function -> fn_is_trigger = PLPGSQL_DML_TRIGGER ;
356
+ fn_is_trigger = PLPGSQL_DML_TRIGGER ;
356
357
else if (is_event_trigger )
357
- function -> fn_is_trigger = PLPGSQL_EVENT_TRIGGER ;
358
+ fn_is_trigger = PLPGSQL_EVENT_TRIGGER ;
358
359
else
359
- function -> fn_is_trigger = PLPGSQL_NOT_TRIGGER ;
360
+ fn_is_trigger = PLPGSQL_NOT_TRIGGER ;
361
+ function -> fn_is_trigger = fn_is_trigger ;
360
362
361
363
/*
362
364
* Initialize the compiler, particularly the namespace stack. The
@@ -374,6 +376,7 @@ do_compile(FunctionCallInfo fcinfo,
374
376
sizeof (PLpgSQL_datum * ) * datums_alloc );
375
377
datums_last = 0 ;
376
378
379
+ Assert (fn_is_trigger == function -> fn_is_trigger );
377
380
switch (function -> fn_is_trigger )
378
381
{
379
382
case PLPGSQL_NOT_TRIGGER :
@@ -537,9 +540,13 @@ do_compile(FunctionCallInfo fcinfo,
537
540
rettypeid == RECORDOID )
538
541
/* okay */ ;
539
542
else if (rettypeid == TRIGGEROID || rettypeid == EVTTRIGGEROID )
543
+ {
540
544
ereport (ERROR ,
541
545
(errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
542
- errmsg ("trigger functions can only be called as triggers" )));
546
+ errmsg ("trigger functions can only be called as triggers" ),
547
+ errhint ("CALLED_AS_TRIGGER=%d CALLED_AS_EVENT_TRIGGER=%d" ,
548
+ CALLED_AS_TRIGGER (fcinfo ), CALLED_AS_EVENT_TRIGGER (fcinfo ))));
549
+ }
543
550
else
544
551
ereport (ERROR ,
545
552
(errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
0 commit comments