Perform slot validity checks in a separate pass over expression.
authorAndres Freund <andres@anarazel.de>
Fri, 29 Dec 2017 20:38:15 +0000 (12:38 -0800)
committerAndres Freund <andres@anarazel.de>
Fri, 29 Dec 2017 20:45:25 +0000 (12:45 -0800)
commitb40933101ca622aa8a35b6fe07ace36effadf1c7
tree386c6c5114eacc544ad6b96e6f860c92272d1740
parent4717fdb14cf0a62ffe1b1023e1c5ea8866e34fa0
Perform slot validity checks in a separate pass over expression.

This reduces code duplication a bit, but the primary benefit that it
makes JITing expression evaluation easier. When doing so we can't, as
previously done in the interpreted case, really change opcode without
recompiling. Nor dow we just carry around unnecessary branches to
avoid re-checking over and over.

As a minor side-effect this makes ExecEvalStepOp() O(log(N)) rather
than O(N).

Author: Andres Freund
Discussion: https://postgr.es/m/20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de
src/backend/executor/execExpr.c
src/backend/executor/execExprInterp.c
src/include/executor/execExpr.h
src/include/nodes/execnodes.h