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-0007Yj-6U@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
------
REL9_1_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/08bc189ee746606b6417ed4a2f0f9d7901c5b8e1

Modified Files
--------------
src/backend/utils/adt/ruleutils.c |   45 ++++++++++++++++++++++++++----------
1 files changed, 32 insertions(+), 13 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix printing of whole-row Vars at top level of a SELECT targetli
Следующее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: PL/Python: Update list of supported environment variables