Inline plpgsql's exec_stmt() into exec_stmts(). This saves one level of C function call per plpgsql statement executed, and permits a tiny additional optimization of not saving and restoring estate->err_stmt for each statement in a block. The net effect seems nearly un-measurable on x86_64, but there's a clear win on aarch64, amounting to two or three percent in a loop over a few simple plpgsql statements.
To do this, we have to get rid of the other existing call sites for exec_stmt(). Replace them with exec_toplevel_block(), which is just defined to do what exec_stmts() does, but for a single PLpgSQL_stmt_block statement. Hard-wiring the expectation of which statement type applies here allows us to skip the dispatch switch, making this not much uglier than the previous factorization. Amit Khandekar, tweaked a bit by me Discussion: https://postgr.es/m/caj3gd9ebnrmud7wbblg8ohaz485h9y+4eihqtgr+k8lhka3...@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/1f902d499eda862a98e881a2227b8d2cf3565374 Modified Files -------------- src/pl/plpgsql/src/pl_exec.c | 280 +++++++++++++++++++++++-------------------- 1 file changed, 147 insertions(+), 133 deletions(-)
