unrolled_join.diff.txt

text/plain

Filename: unrolled_join.diff.txt
Type: text/plain
Part: 0
Message: Re: pg_plan_advice
commit aa085a812c2db077b86caff366d31624b9a06ecf
Author: Robert Haas <rhaas@postgresql.org>
Date:   Thu Jan 8 15:57:34 2026 -0500

    fix pgpa_process_unrolled_join return value

diff --git a/contrib/pg_plan_advice/expected/join_order.out b/contrib/pg_plan_advice/expected/join_order.out
index eaaa38f000c..f3dd7810484 100644
--- a/contrib/pg_plan_advice/expected/join_order.out
+++ b/contrib/pg_plan_advice/expected/join_order.out
@@ -159,7 +159,7 @@ SELECT * FROM jo_fact f
    JOIN_ORDER(f (d1 d2)) /* matched */
  Generated Plan Advice:
    JOIN_ORDER(f (d1 d2))
-   MERGE_JOIN_PLAIN(d2)
+   MERGE_JOIN_PLAIN((d1 d2))
    NESTED_LOOP_MATERIALIZE(d2)
    SEQ_SCAN(f d1 d2)
    NO_GATHER(f d1 d2)
diff --git a/contrib/pg_plan_advice/pgpa_walker.c b/contrib/pg_plan_advice/pgpa_walker.c
index 4dffc60114a..fdc003ec509 100644
--- a/contrib/pg_plan_advice/pgpa_walker.c
+++ b/contrib/pg_plan_advice/pgpa_walker.c
@@ -438,7 +438,10 @@ static Bitmapset *
 pgpa_process_unrolled_join(pgpa_plan_walker_context *walker,
 						   pgpa_unrolled_join *ujoin)
 {
-	Bitmapset  *all_relids = NULL;
+	Bitmapset  *all_relids = bms_copy(ujoin->outer.scan->relids);
+
+	/* If this fails, we didn't unroll properly. */
+	Assert(ujoin->outer.unrolled_join == NULL);
 
 	for (int k = 0; k < ujoin->ninner; ++k)
 	{