@@ -33,6 +33,7 @@ const (
33
33
JoinTypeInner // InnerJoin
34
34
JoinTypeSemi // SemiJoin
35
35
JoinTypeAnti // AntiJoin
36
+ JoinTypeAntiIncludeNulls // AntiJoinIncludingNulls
36
37
JoinTypeLeftOuter // LeftOuterJoin
37
38
JoinTypeLeftOuterExcludeNulls // LeftOuterJoinExcludingNulls
38
39
JoinTypeFullOuter // FullOuterJoin
@@ -49,10 +50,13 @@ const (
49
50
JoinTypeLeftOuterRangeHeap // LeftOuterRangeHeapJoin
50
51
JoinTypeSemiHash // SemiHashJoin
51
52
JoinTypeAntiHash // AntiHashJoin
53
+ JoinTypeAntiHashIncludeNulls // AntiHashJoinIncludeNulls
52
54
JoinTypeSemiLookup // SemiLookupJoin
53
55
JoinTypeAntiLookup // AntiLookupJoin
56
+ JoinTypeAntiLookupIncludeNulls // AntiLookupIncludeNulls
54
57
JoinTypeSemiMerge // SemiMergeJoin
55
58
JoinTypeAntiMerge // AntiMergeJoin
59
+ JoinTypeAntiMergeIncludeNulls // AntiMergeIncludeNulls
56
60
JoinTypeUsing // NaturalJoin
57
61
JoinTypeUsingLeft // NaturalLeftJoin
58
62
JoinTypeUsingRight // NaturalRightJoin
@@ -98,7 +102,10 @@ func (i JoinType) IsPhysical() bool {
98
102
JoinTypeSemiLookup , JoinTypeSemiMerge , JoinTypeSemiHash ,
99
103
JoinTypeHash , JoinTypeLeftOuterHash , JoinTypeLeftOuterHashExcludeNulls ,
100
104
JoinTypeMerge , JoinTypeLeftOuterMerge ,
101
- JoinTypeAntiLookup , JoinTypeAntiMerge , JoinTypeAntiHash , JoinTypeRangeHeap , JoinTypeLeftOuterRangeHeap :
105
+ JoinTypeAntiLookup , JoinTypeAntiLookupIncludeNulls ,
106
+ JoinTypeAntiMerge , JoinTypeAntiMergeIncludeNulls ,
107
+ JoinTypeAntiHash , JoinTypeAntiHashIncludeNulls ,
108
+ JoinTypeRangeHeap , JoinTypeLeftOuterRangeHeap :
102
109
return true
103
110
default :
104
111
return false
@@ -129,7 +136,7 @@ func (i JoinType) IsDegenerate() bool {
129
136
130
137
func (i JoinType ) IsMerge () bool {
131
138
switch i {
132
- case JoinTypeMerge , JoinTypeSemiMerge , JoinTypeAntiMerge , JoinTypeLeftOuterMerge :
139
+ case JoinTypeMerge , JoinTypeSemiMerge , JoinTypeAntiMerge , JoinTypeAntiMergeIncludeNulls , JoinTypeLeftOuterMerge :
133
140
return true
134
141
default :
135
142
return false
@@ -138,7 +145,8 @@ func (i JoinType) IsMerge() bool {
138
145
139
146
func (i JoinType ) IsHash () bool {
140
147
switch i {
141
- case JoinTypeHash , JoinTypeSemiHash , JoinTypeAntiHash , JoinTypeLeftOuterHash , JoinTypeLeftOuterHashExcludeNulls , JoinTypeCrossHash :
148
+ case JoinTypeHash , JoinTypeSemiHash , JoinTypeAntiHash , JoinTypeAntiHashIncludeNulls ,
149
+ JoinTypeLeftOuterHash , JoinTypeLeftOuterHashExcludeNulls , JoinTypeCrossHash :
142
150
return true
143
151
default :
144
152
return false
@@ -157,20 +165,23 @@ func (i JoinType) IsSemi() bool {
157
165
158
166
func (i JoinType ) IsAnti () bool {
159
167
switch i {
160
- case JoinTypeAnti , JoinTypeAntiLookup , JoinTypeAntiMerge , JoinTypeAntiHash :
168
+ case JoinTypeAnti , JoinTypeAntiIncludeNulls , JoinTypeAntiLookup , JoinTypeAntiLookupIncludeNulls ,
169
+ JoinTypeAntiMerge , JoinTypeAntiMergeIncludeNulls , JoinTypeAntiHash , JoinTypeAntiHashIncludeNulls :
161
170
return true
162
171
default :
163
172
return false
164
173
}
165
174
}
166
175
167
176
func (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
+ }
174
185
}
175
186
176
187
func (i JoinType ) IsPlaceholder () bool {
@@ -180,7 +191,8 @@ func (i JoinType) IsPlaceholder() bool {
180
191
181
192
func (i JoinType ) IsLookup () bool {
182
193
switch i {
183
- case JoinTypeLookup , JoinTypeLeftOuterLookup , JoinTypeAntiLookup , JoinTypeSemiLookup :
194
+ case JoinTypeLookup , JoinTypeLeftOuterLookup ,
195
+ JoinTypeAntiLookup , JoinTypeAntiLookupIncludeNulls , JoinTypeSemiLookup :
184
196
return true
185
197
default :
186
198
return false
@@ -221,6 +233,8 @@ func (i JoinType) AsHash() JoinType {
221
233
return JoinTypeSemiHash
222
234
case JoinTypeAnti :
223
235
return JoinTypeAntiHash
236
+ case JoinTypeAntiIncludeNulls :
237
+ return JoinTypeAntiHashIncludeNulls
224
238
case JoinTypeCross :
225
239
return JoinTypeCrossHash
226
240
default :
@@ -249,6 +263,8 @@ func (i JoinType) AsMerge() JoinType {
249
263
return JoinTypeSemiMerge
250
264
case JoinTypeAnti :
251
265
return JoinTypeAntiMerge
266
+ case JoinTypeAntiIncludeNulls :
267
+ return JoinTypeAntiMergeIncludeNulls
252
268
default :
253
269
return i
254
270
}
@@ -264,6 +280,8 @@ func (i JoinType) AsLookup() JoinType {
264
280
return JoinTypeSemiLookup
265
281
case JoinTypeAnti :
266
282
return JoinTypeAntiLookup
283
+ case JoinTypeAntiIncludeNulls :
284
+ return JoinTypeAntiLookupIncludeNulls
267
285
default :
268
286
return i
269
287
}
@@ -521,8 +539,8 @@ func NewLookupJoin(left, right sql.Node, cond sql.Expression) *JoinNode {
521
539
return NewJoin (left , right , JoinTypeLookup , cond )
522
540
}
523
541
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 )
526
544
}
527
545
528
546
func NewSemiJoin (left , right sql.Node , cond sql.Expression ) * JoinNode {
0 commit comments