pgsql: Fix rescan logic in nodeCtescan.
От | Tom Lane |
---|---|
Тема | pgsql: Fix rescan logic in nodeCtescan. |
Дата | |
Msg-id | E1T1mc2-00008O-CB@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix rescan logic in nodeCtescan. The previous coding essentially assumed that nodes would be rescanned in the same order they were initialized in; or at least that the "leader" of a group of CTEscans would be rescanned before any others were required to execute. Unfortunately, that isn't even a little bit true. It's possible to devise queries in which the leader isn't rescanned until other CTEscans on the same CTE have run to completion, or even in which the leader never gets a rescan call at all. The fix makes the leader specially responsible only for initial creation and final destruction of the tuplestore; rescan resets are now a symmetrically shared responsibility. This means that we might reset the tuplestore multiple times when restarting a plan subtree containing multiple CTEscans; but resetting an already-empty tuplestore is cheap enough that that doesn't seem like a problem. Per report from Adam Mackler; the new regression test cases are based on his example query. Back-patch to 8.4 where CTE scans were introduced. Branch ------ REL9_2_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/caf97eb72e2e08378aefdd8f75c10b73fd04172b Modified Files -------------- src/backend/executor/nodeCtescan.c | 37 +++++++++-------- src/test/regress/expected/with.out | 75 ++++++++++++++++++++++++++++++++++++ src/test/regress/sql/with.sql | 56 +++++++++++++++++++++++++++ 3 files changed, 151 insertions(+), 17 deletions(-)
В списке pgsql-committers по дате отправления: