@@ -243,8 +243,10 @@ pub enum RelExpr {
243243 Select ( Box < RelExpr > , Expr ) ,
244244 /// A left deep binary cross product
245245 LeftDeepJoin ( LeftDeepJoin ) ,
246- /// A left deep binary equi-join
247- EqJoin ( LeftDeepJoin , FieldProject , FieldProject ) ,
246+ /// A left deep binary inner equi-join
247+ InnerEqJoin ( LeftDeepJoin , FieldProject , FieldProject ) ,
248+ /// A left deep binary left outer equi-join
249+ LeftOuterEqJoin ( LeftDeepJoin , FieldProject , FieldProject ) ,
248250}
249251
250252/// A table reference
@@ -277,7 +279,8 @@ impl RelExpr {
277279 match self {
278280 Self :: Select ( lhs, _)
279281 | Self :: LeftDeepJoin ( LeftDeepJoin { lhs, .. } )
280- | Self :: EqJoin ( LeftDeepJoin { lhs, .. } , ..) => {
282+ | Self :: InnerEqJoin ( LeftDeepJoin { lhs, .. } , ..)
283+ | Self :: LeftOuterEqJoin ( LeftDeepJoin { lhs, .. } , ..) => {
281284 lhs. visit ( f) ;
282285 }
283286 Self :: RelVar ( ..) => { }
@@ -290,7 +293,8 @@ impl RelExpr {
290293 match self {
291294 Self :: Select ( lhs, _)
292295 | Self :: LeftDeepJoin ( LeftDeepJoin { lhs, .. } )
293- | Self :: EqJoin ( LeftDeepJoin { lhs, .. } , ..) => {
296+ | Self :: InnerEqJoin ( LeftDeepJoin { lhs, .. } , ..)
297+ | Self :: LeftOuterEqJoin ( LeftDeepJoin { lhs, .. } , ..) => {
294298 lhs. visit_mut ( f) ;
295299 }
296300 Self :: RelVar ( ..) => { }
@@ -301,7 +305,11 @@ impl RelExpr {
301305 pub fn nfields ( & self ) -> usize {
302306 match self {
303307 Self :: RelVar ( ..) => 1 ,
304- Self :: LeftDeepJoin ( join) | Self :: EqJoin ( join, ..) => join. lhs . nfields ( ) + 1 ,
308+ Self :: LeftDeepJoin ( join)
309+ | Self :: InnerEqJoin ( join, ..)
310+ | Self :: LeftOuterEqJoin ( join, ..) => {
311+ join. lhs . nfields ( ) + 1
312+ }
305313 Self :: Select ( input, _) => input. nfields ( ) ,
306314 }
307315 }
@@ -310,7 +318,9 @@ impl RelExpr {
310318 pub fn has_field ( & self , field : & str ) -> bool {
311319 match self {
312320 Self :: RelVar ( Relvar { alias, .. } ) => alias. as_ref ( ) == field,
313- Self :: LeftDeepJoin ( join) | Self :: EqJoin ( join, ..) => {
321+ Self :: LeftDeepJoin ( join)
322+ | Self :: InnerEqJoin ( join, ..)
323+ | Self :: LeftOuterEqJoin ( join, ..) => {
314324 join. rhs . alias . as_ref ( ) == field || join. lhs . has_field ( field)
315325 }
316326 Self :: Select ( input, _) => input. has_field ( field) ,
@@ -322,10 +332,12 @@ impl RelExpr {
322332 match self {
323333 Self :: RelVar ( relvar) if relvar. alias . as_ref ( ) == alias => Some ( & relvar. schema ) ,
324334 Self :: Select ( input, _) => input. find_table_schema ( alias) ,
325- Self :: EqJoin ( LeftDeepJoin { rhs, .. } , ..) if rhs. alias . as_ref ( ) == alias => Some ( & rhs. schema ) ,
326- Self :: EqJoin ( LeftDeepJoin { lhs, .. } , ..) => lhs. find_table_schema ( alias) ,
327335 Self :: LeftDeepJoin ( LeftDeepJoin { rhs, .. } ) if rhs. alias . as_ref ( ) == alias => Some ( & rhs. schema ) ,
328336 Self :: LeftDeepJoin ( LeftDeepJoin { lhs, .. } ) => lhs. find_table_schema ( alias) ,
337+ Self :: InnerEqJoin ( LeftDeepJoin { rhs, .. } , ..) if rhs. alias . as_ref ( ) == alias => Some ( & rhs. schema ) ,
338+ Self :: InnerEqJoin ( LeftDeepJoin { lhs, .. } , ..) => lhs. find_table_schema ( alias) ,
339+ Self :: LeftOuterEqJoin ( LeftDeepJoin { rhs, .. } , ..) if rhs. alias . as_ref ( ) == alias => Some ( & rhs. schema ) ,
340+ Self :: LeftOuterEqJoin ( LeftDeepJoin { lhs, .. } , ..) => lhs. find_table_schema ( alias) ,
329341 _ => None ,
330342 }
331343 }
0 commit comments