pgsql: Allow extracting fields from a ROW() expression in more cases.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Allow extracting fields from a ROW() expression in more cases.
Дата
Msg-id E1qhFx0-0042tp-K4@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Allow extracting fields from a ROW() expression in more cases.

Teach get_expr_result_type() to manufacture a tuple descriptor directly
from a RowExpr node.  If the RowExpr has type RECORD, this is the only
way to get a tupdesc for its result, since even if the rowtype has been
blessed, we don't have its typmod available at this point.  (If the
RowExpr has some named composite type, we continue to let the existing
code handle it, since the RowExpr might well not have the correct column
names embedded in it.)

This fixes assorted corner cases illustrated by the added regression
tests.

This is a back-patch of the v13-era commit 8b7a0f1d1 into previous
branches.  At the time I'd judged it not important enough to back-patch,
but the upcoming fix for bug #18077 includes a test case that depends
on this working correctly; and 8b7a0f1d1 has now aged long enough to
have good confidence that it won't break anything.

Discussion: https://postgr.es/m/10872.1572202006@sss.pgh.pa.us
Discussion: https://postgr.es/m/3607145.1694803130@sss.pgh.pa.us

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/2f02d4a2b9cbf4991a73e15d4674d8cfa905bb61

Modified Files
--------------
src/backend/utils/fmgr/funcapi.c       | 32 ++++++++++++++++++++++++++++
src/test/regress/expected/rowtypes.out | 39 ++++++++++++++++++++++++++++++++++
src/test/regress/sql/rowtypes.sql      |  9 ++++++++
3 files changed, 80 insertions(+)


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

Предыдущее
От: Daniel Gustafsson
Дата:
Сообщение: pgsql: Rename variable for code clarity
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix get_expr_result_type() to find field names for RECORD Consts