@@ -33,6 +33,7 @@ const (
3333 JoinTypeInner // InnerJoin
3434 JoinTypeSemi // SemiJoin
3535 JoinTypeAnti // AntiJoin
36+ JoinTypeAntiIncludeNulls // AntiJoinIncludingNulls
3637 JoinTypeLeftOuter // LeftOuterJoin
3738 JoinTypeLeftOuterExcludeNulls // LeftOuterJoinExcludingNulls
3839 JoinTypeFullOuter // FullOuterJoin
@@ -49,10 +50,13 @@ const (
4950 JoinTypeLeftOuterRangeHeap // LeftOuterRangeHeapJoin
5051 JoinTypeSemiHash // SemiHashJoin
5152 JoinTypeAntiHash // AntiHashJoin
53+ JoinTypeAntiHashIncludeNulls // AntiHashJoinIncludeNulls
5254 JoinTypeSemiLookup // SemiLookupJoin
5355 JoinTypeAntiLookup // AntiLookupJoin
56+ JoinTypeAntiLookupIncludeNulls // AntiLookupIncludeNulls
5457 JoinTypeSemiMerge // SemiMergeJoin
5558 JoinTypeAntiMerge // AntiMergeJoin
59+ JoinTypeAntiMergeIncludeNulls // AntiMergeIncludeNulls
5660 JoinTypeUsing // NaturalJoin
5761 JoinTypeUsingLeft // NaturalLeftJoin
5862 JoinTypeUsingRight // NaturalRightJoin
@@ -98,7 +102,10 @@ func (i JoinType) IsPhysical() bool {
98102 JoinTypeSemiLookup , JoinTypeSemiMerge , JoinTypeSemiHash ,
99103 JoinTypeHash , JoinTypeLeftOuterHash , JoinTypeLeftOuterHashExcludeNulls ,
100104 JoinTypeMerge , JoinTypeLeftOuterMerge ,
101- JoinTypeAntiLookup , JoinTypeAntiMerge , JoinTypeAntiHash , JoinTypeRangeHeap , JoinTypeLeftOuterRangeHeap :
105+ JoinTypeAntiLookup , JoinTypeAntiLookupIncludeNulls ,
106+ JoinTypeAntiMerge , JoinTypeAntiMergeIncludeNulls ,
107+ JoinTypeAntiHash , JoinTypeAntiHashIncludeNulls ,
108+ JoinTypeRangeHeap , JoinTypeLeftOuterRangeHeap :
102109 return true
103110 default :
104111 return false
@@ -129,7 +136,7 @@ func (i JoinType) IsDegenerate() bool {
129136
130137func (i JoinType ) IsMerge () bool {
131138 switch i {
132- case JoinTypeMerge , JoinTypeSemiMerge , JoinTypeAntiMerge , JoinTypeLeftOuterMerge :
139+ case JoinTypeMerge , JoinTypeSemiMerge , JoinTypeAntiMerge , JoinTypeAntiMergeIncludeNulls , JoinTypeLeftOuterMerge :
133140 return true
134141 default :
135142 return false
@@ -138,7 +145,8 @@ func (i JoinType) IsMerge() bool {
138145
139146func (i JoinType ) IsHash () bool {
140147 switch i {
141- case JoinTypeHash , JoinTypeSemiHash , JoinTypeAntiHash , JoinTypeLeftOuterHash , JoinTypeLeftOuterHashExcludeNulls , JoinTypeCrossHash :
148+ case JoinTypeHash , JoinTypeSemiHash , JoinTypeAntiHash , JoinTypeAntiHashIncludeNulls ,
149+ JoinTypeLeftOuterHash , JoinTypeLeftOuterHashExcludeNulls , JoinTypeCrossHash :
142150 return true
143151 default :
144152 return false
@@ -157,20 +165,23 @@ func (i JoinType) IsSemi() bool {
157165
158166func (i JoinType ) IsAnti () bool {
159167 switch i {
160- case JoinTypeAnti , JoinTypeAntiLookup , JoinTypeAntiMerge , JoinTypeAntiHash :
168+ case JoinTypeAnti , JoinTypeAntiIncludeNulls , JoinTypeAntiLookup , JoinTypeAntiLookupIncludeNulls ,
169+ JoinTypeAntiMerge , JoinTypeAntiMergeIncludeNulls , JoinTypeAntiHash , JoinTypeAntiHashIncludeNulls :
161170 return true
162171 default :
163172 return false
164173 }
165174}
166175
167176func (i JoinType ) IsPartial () bool {
168- return i == JoinTypeSemi ||
169- i == JoinTypeAnti ||
170- i == JoinTypeSemiHash ||
171- i == JoinTypeAntiHash ||
172- i == JoinTypeAntiLookup ||
173- i == JoinTypeSemiLookup
177+ switch i {
178+ case JoinTypeSemi , JoinTypeAnti , JoinTypeAntiIncludeNulls , JoinTypeSemiHash ,
179+ JoinTypeAntiHash , JoinTypeAntiHashIncludeNulls , JoinTypeAntiLookup , JoinTypeAntiLookupIncludeNulls ,
180+ JoinTypeSemiLookup :
181+ return true
182+ default :
183+ return false
184+ }
174185}
175186
176187func (i JoinType ) IsPlaceholder () bool {
@@ -180,7 +191,8 @@ func (i JoinType) IsPlaceholder() bool {
180191
181192func (i JoinType ) IsLookup () bool {
182193 switch i {
183- case JoinTypeLookup , JoinTypeLeftOuterLookup , JoinTypeAntiLookup , JoinTypeSemiLookup :
194+ case JoinTypeLookup , JoinTypeLeftOuterLookup ,
195+ JoinTypeAntiLookup , JoinTypeAntiLookupIncludeNulls , JoinTypeSemiLookup :
184196 return true
185197 default :
186198 return false
@@ -221,6 +233,8 @@ func (i JoinType) AsHash() JoinType {
221233 return JoinTypeSemiHash
222234 case JoinTypeAnti :
223235 return JoinTypeAntiHash
236+ case JoinTypeAntiIncludeNulls :
237+ return JoinTypeAntiHashIncludeNulls
224238 case JoinTypeCross :
225239 return JoinTypeCrossHash
226240 default :
@@ -249,6 +263,8 @@ func (i JoinType) AsMerge() JoinType {
249263 return JoinTypeSemiMerge
250264 case JoinTypeAnti :
251265 return JoinTypeAntiMerge
266+ case JoinTypeAntiIncludeNulls :
267+ return JoinTypeAntiMergeIncludeNulls
252268 default :
253269 return i
254270 }
@@ -264,6 +280,8 @@ func (i JoinType) AsLookup() JoinType {
264280 return JoinTypeSemiLookup
265281 case JoinTypeAnti :
266282 return JoinTypeAntiLookup
283+ case JoinTypeAntiIncludeNulls :
284+ return JoinTypeAntiLookupIncludeNulls
267285 default :
268286 return i
269287 }
@@ -521,8 +539,8 @@ func NewLookupJoin(left, right sql.Node, cond sql.Expression) *JoinNode {
521539 return NewJoin (left , right , JoinTypeLookup , cond )
522540}
523541
524- func NewAntiJoin (left , right sql.Node , cond sql.Expression ) * JoinNode {
525- return NewJoin (left , right , JoinTypeAnti , cond )
542+ func NewAntiJoinIncludingNulls (left , right sql.Node , cond sql.Expression ) * JoinNode {
543+ return NewJoin (left , right , JoinTypeAntiIncludeNulls , cond )
526544}
527545
528546func NewSemiJoin (left , right sql.Node , cond sql.Expression ) * JoinNode {
0 commit comments