pgsql: Wrap appendrel member outputs in PlaceHolderVars in additional c
От | Tom Lane |
---|---|
Тема | pgsql: Wrap appendrel member outputs in PlaceHolderVars in additional c |
Дата | |
Msg-id | E1RNxgc-0002yC-GC@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Wrap appendrel member outputs in PlaceHolderVars in additional cases. Add PlaceHolderVar wrappers as needed to make UNION ALL sub-select output expressions appear non-constant and distinct from each other. This makes the world safe for add_child_rel_equivalences to do what it does. Before, it was possible for that function to add identical expressions to different EquivalenceClasses, which logically should imply merging such ECs, which would be wrong; or to improperly add a constant to an EquivalenceClass, drastically changing its behavior. Per report from Teodor Sigaev. The only currently known consequence of this bug is "MergeAppend child's targetlist doesn't match MergeAppend" planner failures in 9.1 and later. I am suspicious that there may be other failure modes that could affect older release branches; but in the absence of any hard evidence, I'll refrain from back-patching further than 9.1. Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/57664ed25e5dea117158a2e663c29e60b3546e1c Modified Files -------------- src/backend/optimizer/plan/planmain.c | 2 +- src/backend/optimizer/prep/prepjointree.c | 36 +++++++++++------ src/backend/optimizer/util/placeholder.c | 27 ++++++++++--- src/include/optimizer/placeholder.h | 2 +- src/test/regress/expected/inherit.out | 58 +++++++++++++++++++++++++++++ src/test/regress/sql/inherit.sql | 31 +++++++++++++++ 6 files changed, 134 insertions(+), 22 deletions(-)
В списке pgsql-committers по дате отправления: