diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/executor/execMain.c | 9 | ||||
-rw-r--r-- | src/test/isolation/expected/eval-plan-qual.out | 9 | ||||
-rw-r--r-- | src/test/isolation/specs/eval-plan-qual.spec | 8 |
3 files changed, 26 insertions, 0 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index ff12e2e1364..831c55ce787 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -3085,6 +3085,15 @@ EvalPlanQualStart(EPQState *epqstate, Plan *planTree) rcestate->es_unpruned_relids = parentestate->es_unpruned_relids; /* + * Also make the PartitionPruneInfo and the results of pruning available. + * These need to match exactly so that we initialize all the same Append + * and MergeAppend subplans as the parent did. + */ + rcestate->es_part_prune_infos = parentestate->es_part_prune_infos; + rcestate->es_part_prune_states = parentestate->es_part_prune_states; + rcestate->es_part_prune_results = parentestate->es_part_prune_results; + + /* * Initialize private state information for each SubPlan. We must do this * before running ExecInitNode on the main query tree, since * ExecInitSubPlan expects to be able to find these entries. Some of the diff --git a/src/test/isolation/expected/eval-plan-qual.out b/src/test/isolation/expected/eval-plan-qual.out index 3d31d0f84e5..60eca44b4e3 100644 --- a/src/test/isolation/expected/eval-plan-qual.out +++ b/src/test/isolation/expected/eval-plan-qual.out @@ -1457,3 +1457,12 @@ step sysmerge2: step c1: COMMIT; step sysmerge2: <... completed> step c2: COMMIT; + +starting permutation: s1pp1 s2pp1 s2pp2 s2pp3 c1 c2 +step s1pp1: UPDATE another_parttbl SET b = b + 1 WHERE a = 1; +step s2pp1: SET plan_cache_mode TO force_generic_plan; +step s2pp2: PREPARE epd AS DELETE FROM another_parttbl WHERE a = $1; +step s2pp3: EXECUTE epd(1); <waiting ...> +step c1: COMMIT; +step s2pp3: <... completed> +step c2: COMMIT; diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs/eval-plan-qual.spec index c6eee685586..64afffb1d83 100644 --- a/src/test/isolation/specs/eval-plan-qual.spec +++ b/src/test/isolation/specs/eval-plan-qual.spec @@ -204,6 +204,7 @@ step sys1 { UPDATE pg_class SET reltuples = 123 WHERE oid = 'accounts'::regclass; } +step s1pp1 { UPDATE another_parttbl SET b = b + 1 WHERE a = 1; } session s2 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } @@ -312,6 +313,10 @@ step sysmerge2 { step c2 { COMMIT; } step r2 { ROLLBACK; } +step s2pp1 { SET plan_cache_mode TO force_generic_plan; } +step s2pp2 { PREPARE epd AS DELETE FROM another_parttbl WHERE a = $1; } +step s2pp3 { EXECUTE epd(1); } + session s3 setup { BEGIN ISOLATION LEVEL READ COMMITTED; } step read { SELECT * FROM accounts ORDER BY accountid; } @@ -415,3 +420,6 @@ permutation simplepartupdate_noroute complexpartupdate_doesnt_route c1 c2 read_p permutation sys1 sysupd2 c1 c2 permutation sys1 sysmerge2 c1 c2 + +# Exercise run-time partition pruning code in an EPQ recheck +permutation s1pp1 s2pp1 s2pp2 s2pp3 c1 c2 |