st 26. 12. 2018 v 6:09 odesílatel Michael Paquier <michael@paquier.xyz> napsal:
On Wed, Dec 19, 2018 at 07:04:50AM +0100, Pavel Stehule wrote: > I can imagine some tracking extension, that will do some > initializations on plpgsql_stmt_block statement hook - but the most > important will not be called ever.
I was just studying this stuff and reviewing this patch with fresh eyes, and it seems to me that it is actually incorrect. This changes the execution logic so as stmt_beg and stmt_end are called additionally each time a function, a trigger or an event trigger is executed. If one looks closely at the code, he/she could notice that func_beg and func_end are already present as hook points to watch what is happening in the execution, as these are here to give entry points for execution functions, so it seems to me that we don't need extra watch calls as proposed, because there is already everything needed, and that the current points are correct.
The design about this feature has not clean borders - I see a problem with func_beg and func_end because these handlers should to share some logic with stmt_beg, stmt_end when handler for stmt_block is not empty.
More the some behave can be surprise for developer - example - if use handler for smt_beg
then for code
$$
BEGIN
RETURN x;
END;
$$
is called only once - what is expected;
but for code
$$
BEGIN
BEGIN
RETURN x;
END;
END
$$
is called two times, what is not expected, if you don't know some about this inconsistency.
So it is reason, why I don't think so current behave is correct. On second hand, the impact is very small - only few extensions uses plpgsql plugin API, and workaround is not hard. So I can live with current state if nobody see this issue (sure - it is minor issue).