pgsql: Fix printing of whole-row Vars at top level of a SELECT targetli
От | Tom Lane |
---|---|
Тема | pgsql: Fix printing of whole-row Vars at top level of a SELECT targetli |
Дата | |
Msg-id | E1SNuvh-0007Yo-9b@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix printing of whole-row Vars at top level of a SELECT targetlist. Normally whole-row Vars are printed as "tabname.*". However, that does not work at top level of a targetlist, because per SQL standard the parser will think that the "*" should result in column-by-column expansion; which is not at all what a whole-row Var implies. We used to just print the table name in such cases, which works most of the time; but it fails if the table name matches a column name available anywhere in the FROM clause. This could lead for instance to a view being interpreted differently after dump and reload. Adding parentheses doesn't fix it, but there is a reasonably simple kluge we can use instead: attach a no-op cast, so that the "*" isn't syntactically at top level anymore. This makes the printing of such whole-row Vars a lot more consistent with other Vars, and may indeed fix more cases than just the reported one; I'm suspicious that cases involving schema qualification probably didn't work properly before, either. Per bug report and fix proposal from Abbas Butt, though this patch is quite different in detail from his. Back-patch to all supported versions. Branch ------ REL8_4_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/a45c63ea0e5fcd3aaf9b707ec6fc059e07cd18a4 Modified Files -------------- src/backend/utils/adt/ruleutils.c | 45 ++++++++++++++++++++++++++---------- 1 files changed, 32 insertions(+), 13 deletions(-)
В списке pgsql-committers по дате отправления: