Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd1c9c86

Browse files
committed
Further tighten nullingrel marking rules in build_joinrel_tlist().
The code I added infee7b77 could misbehave if commute_above_rcontains multiple relids. While adding too many relids here isprobably harmless (pre-fee7b77b9, we did it all the time), it'snot very expensive to be accurate: we just have to intersectcommute_above_r with the join's relids.Discussion:https://postgr.es/m/17781-c0405c8b3cd5e072@postgresql.org
1 parent798c017 commitd1c9c86

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

‎src/backend/optimizer/util/relnode.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,9 +1051,9 @@ min_join_parameterization(PlannerInfo *root,
10511051
*A leftjoin (B leftjoin C on (Pbc)) on (Pab)
10521052
* Here the now-upper A/B join must not mark C columns as nulled by itself.
10531053
*
1054-
* Second,ifsjinfo->commute_above_r is already part of the joinrel then
1055-
*itis added to the nulling bitmaps of nullable Vars. This takes care of
1056-
* the reverse case where we implement
1054+
* Second,any relid insjinfo->commute_above_rthatis already part of
1055+
*the joinrelis added to the nulling bitmaps of nullable Vars and PHVs.
1056+
*This takes care ofthe reverse case where we implement
10571057
*A leftjoin (B leftjoin C on (Pbc)) on (Pab)
10581058
* as
10591059
*(A leftjoin B on (Pab)) leftjoin C on (Pbc)
@@ -1100,9 +1100,10 @@ build_joinrel_tlist(PlannerInfo *root, RelOptInfo *joinrel,
11001100
bms_is_subset(phv->phrels,sjinfo->syn_lefthand))))
11011101
phv->phnullingrels=bms_add_member(phv->phnullingrels,
11021102
sjinfo->ojrelid);
1103-
if (bms_overlap(sjinfo->commute_above_r,joinrel->relids))
1104-
phv->phnullingrels=bms_add_members(phv->phnullingrels,
1105-
sjinfo->commute_above_r);
1103+
phv->phnullingrels=
1104+
bms_join(phv->phnullingrels,
1105+
bms_intersect(sjinfo->commute_above_r,
1106+
relids));
11061107
}
11071108

11081109
joinrel->reltarget->exprs=lappend(joinrel->reltarget->exprs,
@@ -1164,9 +1165,10 @@ build_joinrel_tlist(PlannerInfo *root, RelOptInfo *joinrel,
11641165
bms_is_member(var->varno,sjinfo->syn_lefthand))))
11651166
var->varnullingrels=bms_add_member(var->varnullingrels,
11661167
sjinfo->ojrelid);
1167-
if (bms_overlap(sjinfo->commute_above_r,joinrel->relids))
1168-
var->varnullingrels=bms_add_members(var->varnullingrels,
1169-
sjinfo->commute_above_r);
1168+
var->varnullingrels=
1169+
bms_join(var->varnullingrels,
1170+
bms_intersect(sjinfo->commute_above_r,
1171+
relids));
11701172
}
11711173

11721174
joinrel->reltarget->exprs=lappend(joinrel->reltarget->exprs,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp