Or bottom of make_join_rel(). IMO build_join_rel() is responsible for just building (or searching from a list) a RelOptInfo for given relids. After that make_join_rel() calls add_paths_to_joinrel() with appropriate arguments per join type to generate actual Paths implements the join. make_join_rel() is called only once for particular relid combination, and there SpecialJoinInfo and restrictlist (conditions specified in JOIN-ON and WHERE), so it seems promising for FDW cases.
I like that idea, but I think we will have complex hook signature, it won't remain as simple as hook (root, joinrel).
--
Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company