From e0ef136d5235f39f5652c209c08a5d4322560e9c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Sun, 30 Dec 2018 14:35:15 +0900 Subject: [PATCH] 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 --- src/pl/plpgsql/src/pl_exec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 42358c2ebe4..f292fcad2d8 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -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;