pgsql: Fix EXPLAIN of SEARCH BREADTH FIRST with a constant initial valu

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix EXPLAIN of SEARCH BREADTH FIRST with a constant initial valu
Date: 2022-10-16 23:18:22
Message-ID: E1okCth-002gV0-BV@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix EXPLAIN of SEARCH BREADTH FIRST with a constant initial value.

If the non-recursive term of a SEARCH BREADTH FIRST recursive
query has only constants in its target list, the planner will
fold the starting RowExpr added by rewrite into a simple Const
of type RECORD. The executor doesn't have any problem with
that --- but EXPLAIN VERBOSE will encounter the Const as the
ultimate source of truth about what the field names of the
SET column are, and it didn't know what to do with that.
Fortunately, we can pull the identifying typmod out of the
Const, in much the same way that record_out would.

For reasons that remain a bit obscure to me, this only fails
with SEARCH BREADTH FIRST, not SEARCH DEPTH FIRST or CYCLE.
But I added regression test cases for both of those options
too, just to make sure we don't break it in future.

Per bug #17644 from Matthijs van der Vleuten. Back-patch
to v14 where these constructs were added.

Discussion: https://postgr.es/m/17644-3bd1f3036d6d7a16@postgresql.org

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/8122160ffb68acb0db740f4f6456fdaaaa577d90

Modified Files
--------------
src/backend/utils/adt/ruleutils.c | 3 +-
src/backend/utils/fmgr/funcapi.c | 34 +++++++++++
src/test/regress/expected/with.out | 120 +++++++++++++++++++++++++++++++++++++
src/test/regress/sql/with.sql | 52 ++++++++++++++++
4 files changed, 208 insertions(+), 1 deletion(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2022-10-17 02:14:39 pgsql: Add checks for regexes with user name map in test for peer authe
Previous Message Tom Lane 2022-10-16 23:18:21 pgsql: Fix EXPLAIN of SEARCH BREADTH FIRST with a constant initial valu