Don't evaluate the FOR PORTION OF target under EXPLAIN ExecInitModifyTable() evaluated ForPortionOfExpr.targetRange unconditionally at executor start-up, with no EXEC_FLAG_EXPLAIN_ONLY guard. This caused three problems:
- EXPLAIN (GENERIC_PLAN) failed with "no value found for parameter 1". - Plain EXPLAIN with FOR PORTION OF (null) raised "FOR PORTION OF target must not be null". - Plain EXPLAIN ran user functions appearing in the target a second time, beyond the one evaluation the planner already does for selectivity estimation. Now we skip the evaluation and the accompanying null check in explain-only mode. Reported-by: Noah Misch <[email protected]> Author: Paul A. Jungwirth <[email protected]> Discussion: https://www.postgresql.org/message-id/flat/CA%2BrenyXci9khYXJ8uSwzF30DVw%2Bzc4QwGb1RdsuOu_YtrFuy1g%40mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/140fdfcdf12d524541ff26491b8e2076a690e434 Modified Files -------------- src/backend/executor/nodeModifyTable.c | 40 +++++++------ src/test/regress/expected/for_portion_of.out | 89 ++++++++++++++++++++++++++++ src/test/regress/sql/for_portion_of.sql | 44 ++++++++++++++ 3 files changed, 156 insertions(+), 17 deletions(-)
