Discarded adjust_relid_set() return values in remove_self_join_rel

From: SATYANARAYANA NARLAPURAM <satyanarlapuram(at)gmail(dot)com>
To: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Discarded adjust_relid_set() return values in remove_self_join_rel
Date: 2026-04-25 07:44:01
Message-ID: CAHg+QDf+fJsyT_Oj6xDCGkyKWMQ=oEjLdxZ_K4WmKApQWP8hjA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi hackers,

I found that remove_self_join_rel() in analyzejoins.c discards the
return values of two adjust_relid_set() calls when updating
root->all_result_relids and root->leaf_result_relids:

adjust_relid_set(root->all_result_relids, toRemove->relid,
toKeep->relid);
adjust_relid_set(root->leaf_result_relids, toRemove->relid,
toKeep->relid);

adjust_relid_set() does not modify its input in-place. When it finds
the old relid in the set, it calls bms_copy() to create a new
Bitmapset, performs the substitution on the copy, and returns the new
pointer. Without capturing the return value, the original sets are
never updated. Every other call site in the file analyzejoins.c correctly
assigns the return value.

I am not able to craft a query to show it as a problem.
For the current release, these two lines appears to be a no-op?

Attached a patch to assign the returned values.

Thanks,
Satya

Attachment Content-Type Size
0001-Fix-discarded-adjust_relid_set-return-values-in-SJE.patch application/octet-stream 1.7 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tender Wang 2026-04-25 07:53:31 Re: Discarded adjust_relid_set() return values in remove_self_join_rel
Previous Message Peter Eisentraut 2026-04-25 06:12:07 Re: small cleanup patches for collation code