pgsql: In locate_grouping_columns(), don't expect an exact match of Var
От | Tom Lane |
---|---|
Тема | pgsql: In locate_grouping_columns(), don't expect an exact match of Var |
Дата | |
Msg-id | E1VCyxJ-0003w5-OP@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
In locate_grouping_columns(), don't expect an exact match of Var typmods. It's possible that inlining of SQL functions (or perhaps other changes?) has exposed typmod information not known at parse time. In such cases, Vars generated by query_planner might have valid typmod values while the original grouping columns only have typmod -1. This isn't a semantic problem since the behavior of grouping only depends on type not typmod, but it breaks locate_grouping_columns' use of tlist_member to locate the matching entry in query_planner's result tlist. We can fix this without an excessive amount of new code or complexity by relying on the fact that locate_grouping_columns only gets called when make_subplanTargetList has set need_tlist_eval == false, and that can only happen if all the grouping columns are simple Vars. Therefore we only need to search the sub_tlist for a matching Var, and we can reasonably define a "match" as being a match of the Var identity fields varno/varattno/varlevelsup. The code still Asserts that vartype matches, but ignores vartypmod. Per bug #8393 from Evan Martin. The added regression test case is basically the same as his example. This has been broken for a very long time, so back-patch to all supported branches. Branch ------ REL9_1_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/f7bbd46dcfb057459f467da1b0385ae6c13e5977 Modified Files -------------- src/backend/optimizer/plan/planner.c | 21 ++++++++++++++++++--- src/backend/optimizer/util/tlist.c | 29 +++++++++++++++++++++++++++++ src/include/optimizer/tlist.h | 1 + src/test/regress/expected/rangefuncs.out | 11 +++++++++++ src/test/regress/sql/rangefuncs.sql | 7 +++++++ 5 files changed, 66 insertions(+), 3 deletions(-)
В списке pgsql-committers по дате отправления: