@@ -197,8 +197,10 @@ pub enum RelExpr {
197197 Select ( Box < RelExpr > , Expr ) ,
198198 /// A left deep binary cross product
199199 LeftDeepJoin ( LeftDeepJoin ) ,
200- /// A left deep binary equi-join
201- EqJoin ( LeftDeepJoin , FieldProject , FieldProject ) ,
200+ /// A left deep binary inner equi-join
201+ InnerEqJoin ( LeftDeepJoin , FieldProject , FieldProject ) ,
202+ /// A left deep binary left outer equi-join
203+ LeftOuterEqJoin ( LeftDeepJoin , FieldProject , FieldProject ) ,
202204}
203205
204206/// A table reference
@@ -219,7 +221,8 @@ impl RelExpr {
219221 match self {
220222 Self :: Select ( lhs, _)
221223 | Self :: LeftDeepJoin ( LeftDeepJoin { lhs, .. } )
222- | Self :: EqJoin ( LeftDeepJoin { lhs, .. } , ..) => {
224+ | Self :: InnerEqJoin ( LeftDeepJoin { lhs, .. } , ..)
225+ | Self :: LeftOuterEqJoin ( LeftDeepJoin { lhs, .. } , ..) => {
223226 lhs. visit ( f) ;
224227 }
225228 Self :: RelVar ( ..) => { }
@@ -232,7 +235,8 @@ impl RelExpr {
232235 match self {
233236 Self :: Select ( lhs, _)
234237 | Self :: LeftDeepJoin ( LeftDeepJoin { lhs, .. } )
235- | Self :: EqJoin ( LeftDeepJoin { lhs, .. } , ..) => {
238+ | Self :: InnerEqJoin ( LeftDeepJoin { lhs, .. } , ..)
239+ | Self :: LeftOuterEqJoin ( LeftDeepJoin { lhs, .. } , ..) => {
236240 lhs. visit_mut ( f) ;
237241 }
238242 Self :: RelVar ( ..) => { }
@@ -243,7 +247,11 @@ impl RelExpr {
243247 pub fn nfields ( & self ) -> usize {
244248 match self {
245249 Self :: RelVar ( ..) => 1 ,
246- Self :: LeftDeepJoin ( join) | Self :: EqJoin ( join, ..) => join. lhs . nfields ( ) + 1 ,
250+ Self :: LeftDeepJoin ( join)
251+ | Self :: InnerEqJoin ( join, ..)
252+ | Self :: LeftOuterEqJoin ( join, ..) => {
253+ join. lhs . nfields ( ) + 1
254+ }
247255 Self :: Select ( input, _) => input. nfields ( ) ,
248256 }
249257 }
@@ -252,7 +260,9 @@ impl RelExpr {
252260 pub fn has_field ( & self , field : & str ) -> bool {
253261 match self {
254262 Self :: RelVar ( Relvar { alias, .. } ) => alias. as_ref ( ) == field,
255- Self :: LeftDeepJoin ( join) | Self :: EqJoin ( join, ..) => {
263+ Self :: LeftDeepJoin ( join)
264+ | Self :: InnerEqJoin ( join, ..)
265+ | Self :: LeftOuterEqJoin ( join, ..) => {
256266 join. rhs . alias . as_ref ( ) == field || join. lhs . has_field ( field)
257267 }
258268 Self :: Select ( input, _) => input. has_field ( field) ,
@@ -264,10 +274,12 @@ impl RelExpr {
264274 match self {
265275 Self :: RelVar ( relvar) if relvar. alias . as_ref ( ) == alias => Some ( & relvar. schema ) ,
266276 Self :: Select ( input, _) => input. find_table_schema ( alias) ,
267- Self :: EqJoin ( LeftDeepJoin { rhs, .. } , ..) if rhs. alias . as_ref ( ) == alias => Some ( & rhs. schema ) ,
268- Self :: EqJoin ( LeftDeepJoin { lhs, .. } , ..) => lhs. find_table_schema ( alias) ,
269277 Self :: LeftDeepJoin ( LeftDeepJoin { rhs, .. } ) if rhs. alias . as_ref ( ) == alias => Some ( & rhs. schema ) ,
270278 Self :: LeftDeepJoin ( LeftDeepJoin { lhs, .. } ) => lhs. find_table_schema ( alias) ,
279+ Self :: InnerEqJoin ( LeftDeepJoin { rhs, .. } , ..) if rhs. alias . as_ref ( ) == alias => Some ( & rhs. schema ) ,
280+ Self :: InnerEqJoin ( LeftDeepJoin { lhs, .. } , ..) => lhs. find_table_schema ( alias) ,
281+ Self :: LeftOuterEqJoin ( LeftDeepJoin { rhs, .. } , ..) if rhs. alias . as_ref ( ) == alias => Some ( & rhs. schema ) ,
282+ Self :: LeftOuterEqJoin ( LeftDeepJoin { lhs, .. } , ..) => lhs. find_table_schema ( alias) ,
271283 _ => None ,
272284 }
273285 }
0 commit comments