Thread
-
Discarded adjust_relid_set() return values in remove_self_join_rel
SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com> — 2026-04-25T07:44:01Z
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 -
Re: Discarded adjust_relid_set() return values in remove_self_join_rel
Tender Wang <tndrwang@gmail.com> — 2026-04-25T07:53:31Z
Hi, SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com> 于2026年4月25日周六 15:44写道: > > 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. The topic in [1] seems to be the same issue as your report. You can take a look at [1] to double-check. [1] https://www.postgresql.org/message-id/CAMbWs49fYQcqJfJ_Gtn8r1GFNoYtb1%3D2AUab4ieuqY4Zid9ocQ%40mail.gmail.com (Sorry for not adding pgsql-hackers mail in the last email) -- Thanks, Tender Wang