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

Commitb0b72c6

Browse files
committed
Don't pass down nonnullable_vars while reducing outer joins.
We weren't actually using the passed-down list for anything, otherthan computing the new value to be passed down further. I (tgl)probably had the idea that we'd need this data eventually; butno use-case has emerged in a good long while, so let's just stopexpending useless cycles here.Richard GuoDiscussion:https://postgr.es/m/CAMbWs48KLy9aBb=sZ5MoNmnqAcGHaW_JTGWLCgoE_uMW7S6C-A@mail.gmail.com
1 parentff8fa0b commitb0b72c6

File tree

1 file changed

+6
-27
lines changed

1 file changed

+6
-27
lines changed

‎src/backend/optimizer/prep/prepjointree.c

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ static void reduce_outer_joins_pass2(Node *jtnode,
117117
reduce_outer_joins_state*state,
118118
PlannerInfo*root,
119119
Relidsnonnullable_rels,
120-
List*nonnullable_vars,
121120
List*forced_null_vars);
122121
staticNode*remove_useless_results_recurse(PlannerInfo*root,Node*jtnode);
123122
staticintget_result_relid(PlannerInfo*root,Node*jtnode);
@@ -2693,7 +2692,7 @@ reduce_outer_joins(PlannerInfo *root)
26932692
elog(ERROR,"so where are the outer joins?");
26942693

26952694
reduce_outer_joins_pass2((Node*)root->parse->jointree,
2696-
state,root,NULL,NIL,NIL);
2695+
state,root,NULL,NIL);
26972696
}
26982697

26992698
/*
@@ -2770,15 +2769,13 @@ reduce_outer_joins_pass1(Node *jtnode)
27702769
*state: state data collected by phase 1 for this node
27712770
*root: toplevel planner state
27722771
*nonnullable_rels: set of base relids forced non-null by upper quals
2773-
*nonnullable_vars: list of Vars forced non-null by upper quals
27742772
*forced_null_vars: list of Vars forced null by upper quals
27752773
*/
27762774
staticvoid
27772775
reduce_outer_joins_pass2(Node*jtnode,
27782776
reduce_outer_joins_state*state,
27792777
PlannerInfo*root,
27802778
Relidsnonnullable_rels,
2781-
List*nonnullable_vars,
27822779
List*forced_null_vars)
27832780
{
27842781
/*
@@ -2795,16 +2792,12 @@ reduce_outer_joins_pass2(Node *jtnode,
27952792
ListCell*l;
27962793
ListCell*s;
27972794
Relidspass_nonnullable_rels;
2798-
List*pass_nonnullable_vars;
27992795
List*pass_forced_null_vars;
28002796

28012797
/* Scan quals to see if we can add any constraints */
28022798
pass_nonnullable_rels=find_nonnullable_rels(f->quals);
28032799
pass_nonnullable_rels=bms_add_members(pass_nonnullable_rels,
28042800
nonnullable_rels);
2805-
pass_nonnullable_vars=find_nonnullable_vars(f->quals);
2806-
pass_nonnullable_vars=list_concat(pass_nonnullable_vars,
2807-
nonnullable_vars);
28082801
pass_forced_null_vars=find_forced_null_vars(f->quals);
28092802
pass_forced_null_vars=list_concat(pass_forced_null_vars,
28102803
forced_null_vars);
@@ -2817,7 +2810,6 @@ reduce_outer_joins_pass2(Node *jtnode,
28172810
if (sub_state->contains_outer)
28182811
reduce_outer_joins_pass2(lfirst(l),sub_state,root,
28192812
pass_nonnullable_rels,
2820-
pass_nonnullable_vars,
28212813
pass_forced_null_vars);
28222814
}
28232815
bms_free(pass_nonnullable_rels);
@@ -2830,8 +2822,6 @@ reduce_outer_joins_pass2(Node *jtnode,
28302822
JoinTypejointype=j->jointype;
28312823
reduce_outer_joins_state*left_state=linitial(state->sub_states);
28322824
reduce_outer_joins_state*right_state=lsecond(state->sub_states);
2833-
List*local_nonnullable_vars=NIL;
2834-
boolcomputed_local_nonnullable_vars= false;
28352825

28362826
/* Can we simplify this join? */
28372827
switch (jointype)
@@ -2906,17 +2896,18 @@ reduce_outer_joins_pass2(Node *jtnode,
29062896
*/
29072897
if (jointype==JOIN_LEFT)
29082898
{
2899+
List*nonnullable_vars;
29092900
List*overlap;
29102901

2911-
local_nonnullable_vars=find_nonnullable_vars(j->quals);
2912-
computed_local_nonnullable_vars=true;
2902+
/* Find Vars inj->quals that must be non-null in joined rows */
2903+
nonnullable_vars=find_nonnullable_vars(j->quals);
29132904

29142905
/*
2915-
* It's not sufficient to check whetherlocal_nonnullable_vars and
2906+
* It's not sufficient to check whethernonnullable_vars and
29162907
* forced_null_vars overlap: we need to know if the overlap
29172908
* includes any RHS variables.
29182909
*/
2919-
overlap=list_intersection(local_nonnullable_vars,
2910+
overlap=list_intersection(nonnullable_vars,
29202911
forced_null_vars);
29212912
if (overlap!=NIL&&
29222913
bms_overlap(pull_varnos(root, (Node*)overlap),
@@ -2941,7 +2932,6 @@ reduce_outer_joins_pass2(Node *jtnode,
29412932
Relidslocal_nonnullable_rels;
29422933
List*local_forced_null_vars;
29432934
Relidspass_nonnullable_rels;
2944-
List*pass_nonnullable_vars;
29452935
List*pass_forced_null_vars;
29462936

29472937
/*
@@ -2968,16 +2958,12 @@ reduce_outer_joins_pass2(Node *jtnode,
29682958
if (jointype!=JOIN_FULL)
29692959
{
29702960
local_nonnullable_rels=find_nonnullable_rels(j->quals);
2971-
if (!computed_local_nonnullable_vars)
2972-
local_nonnullable_vars=find_nonnullable_vars(j->quals);
29732961
local_forced_null_vars=find_forced_null_vars(j->quals);
29742962
if (jointype==JOIN_INNER||jointype==JOIN_SEMI)
29752963
{
29762964
/* OK to merge upper and local constraints */
29772965
local_nonnullable_rels=bms_add_members(local_nonnullable_rels,
29782966
nonnullable_rels);
2979-
local_nonnullable_vars=list_concat(local_nonnullable_vars,
2980-
nonnullable_vars);
29812967
local_forced_null_vars=list_concat(local_forced_null_vars,
29822968
forced_null_vars);
29832969
}
@@ -2995,26 +2981,22 @@ reduce_outer_joins_pass2(Node *jtnode,
29952981
{
29962982
/* pass union of local and upper constraints */
29972983
pass_nonnullable_rels=local_nonnullable_rels;
2998-
pass_nonnullable_vars=local_nonnullable_vars;
29992984
pass_forced_null_vars=local_forced_null_vars;
30002985
}
30012986
elseif (jointype!=JOIN_FULL)/* ie, LEFT or ANTI */
30022987
{
30032988
/* can't pass local constraints to non-nullable side */
30042989
pass_nonnullable_rels=nonnullable_rels;
3005-
pass_nonnullable_vars=nonnullable_vars;
30062990
pass_forced_null_vars=forced_null_vars;
30072991
}
30082992
else
30092993
{
30102994
/* no constraints pass through JOIN_FULL */
30112995
pass_nonnullable_rels=NULL;
3012-
pass_nonnullable_vars=NIL;
30132996
pass_forced_null_vars=NIL;
30142997
}
30152998
reduce_outer_joins_pass2(j->larg,left_state,root,
30162999
pass_nonnullable_rels,
3017-
pass_nonnullable_vars,
30183000
pass_forced_null_vars);
30193001
}
30203002

@@ -3024,19 +3006,16 @@ reduce_outer_joins_pass2(Node *jtnode,
30243006
{
30253007
/* pass appropriate constraints, per comment above */
30263008
pass_nonnullable_rels=local_nonnullable_rels;
3027-
pass_nonnullable_vars=local_nonnullable_vars;
30283009
pass_forced_null_vars=local_forced_null_vars;
30293010
}
30303011
else
30313012
{
30323013
/* no constraints pass through JOIN_FULL */
30333014
pass_nonnullable_rels=NULL;
3034-
pass_nonnullable_vars=NIL;
30353015
pass_forced_null_vars=NIL;
30363016
}
30373017
reduce_outer_joins_pass2(j->rarg,right_state,root,
30383018
pass_nonnullable_rels,
3039-
pass_nonnullable_vars,
30403019
pass_forced_null_vars);
30413020
}
30423021
bms_free(local_nonnullable_rels);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp