• Tom Lane's avatar
    Inline plpgsql's exec_stmt() into exec_stmts(). · 1f902d49
    Tom Lane authored
    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+K8Lhka3vcQ@mail.gmail.com
    1f902d49
pl_exec.c 255 KB