1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-06 19:59:18 +03:00

Trigger stmt_beg and stmt_end for top-level statement blocks of PL/pgSQL

PL/pgSQL provides a set of callbacks which can be used for extra
instrumentation of functions written in this language called at function
setup, begin and end, as well as statement begin and end.  When calling
a routine, a trigger, or an event trigger, statement callbacks are not
getting called for the top-level statement block leading to an
inconsistent handling compared to the other statements.  This
inconsistency can potentially complicate extensions doing
instrumentation work on top of PL/pgSQL, so this commit makes sure that
all statement blocks, including the top-level one, go through the
correct corresponding callbacks.

Author: Pavel Stehule
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/CAFj8pRArEANsaUjo5in9_iQt0vKf9ecwDAmsdN_EBwL13ps12A@mail.gmail.com
This commit is contained in:
Michael Paquier 2018-12-30 14:35:15 +09:00
parent 4203842a1c
commit e0ef136d52

View File

@ -585,7 +585,7 @@ plpgsql_exec_function(PLpgSQL_function *func, FunctionCallInfo fcinfo,
*/
estate.err_text = NULL;
estate.err_stmt = (PLpgSQL_stmt *) (func->action);
rc = exec_stmt_block(&estate, func->action);
rc = exec_stmt(&estate, (PLpgSQL_stmt *) func->action);
if (rc != PLPGSQL_RC_RETURN)
{
estate.err_stmt = NULL;
@ -955,7 +955,7 @@ plpgsql_exec_trigger(PLpgSQL_function *func,
*/
estate.err_text = NULL;
estate.err_stmt = (PLpgSQL_stmt *) (func->action);
rc = exec_stmt_block(&estate, func->action);
rc = exec_stmt(&estate, (PLpgSQL_stmt *) func->action);
if (rc != PLPGSQL_RC_RETURN)
{
estate.err_stmt = NULL;
@ -1116,7 +1116,7 @@ plpgsql_exec_event_trigger(PLpgSQL_function *func, EventTriggerData *trigdata)
*/
estate.err_text = NULL;
estate.err_stmt = (PLpgSQL_stmt *) (func->action);
rc = exec_stmt_block(&estate, func->action);
rc = exec_stmt(&estate, (PLpgSQL_stmt *) func->action);
if (rc != PLPGSQL_RC_RETURN)
{
estate.err_stmt = NULL;