@@ -453,14 +453,7 @@ mod tests {
453453 . build ( )
454454 . unwrap ( ) ;
455455
456- let join_predicate = col ( Column {
457- relation : Some ( source_name. clone ( ) ) ,
458- name : "id" . to_owned ( ) ,
459- } )
460- . eq ( col ( Column {
461- relation : Some ( target_name. clone ( ) ) ,
462- name : "id" . to_owned ( ) ,
463- } ) ) ;
456+ let join_predicate = make_join_predicate ( & source_name, & target_name) ;
464457
465458 let pred = try_construct_early_filter (
466459 join_predicate,
@@ -551,14 +544,7 @@ mod tests {
551544 . build ( )
552545 . unwrap ( ) ;
553546
554- let join_predicate = col ( Column {
555- relation : Some ( source_name. clone ( ) ) ,
556- name : "id" . to_owned ( ) ,
557- } )
558- . eq ( col ( Column {
559- relation : Some ( target_name. clone ( ) ) ,
560- name : "id" . to_owned ( ) ,
561- } ) ) ;
547+ let join_predicate = make_join_predicate ( & source_name, & target_name) ;
562548
563549 let pred = try_construct_early_filter (
564550 join_predicate,
@@ -574,14 +560,7 @@ mod tests {
574560
575561 assert ! ( pred. is_some( ) ) ;
576562
577- let filter = col ( Column {
578- relation : Some ( target_name. clone ( ) ) ,
579- name : "id" . to_owned ( ) ,
580- } )
581- . between (
582- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "B" . to_string ( ) ) ) ) ,
583- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "C" . to_string ( ) ) ) ) ,
584- ) ;
563+ let filter = col ( Column :: new ( Some ( target_name. clone ( ) ) , "id" ) ) . between ( lit ( "B" ) , lit ( "C" ) ) ;
585564 assert_eq ! ( pred. unwrap( ) , filter) ;
586565 }
587566
@@ -620,23 +599,9 @@ mod tests {
620599 . build ( )
621600 . unwrap ( ) ;
622601
623- let join_predicate = col ( Column {
624- relation : Some ( source_name. clone ( ) ) ,
625- name : "id" . to_owned ( ) ,
626- } )
627- . eq ( col ( Column {
628- relation : Some ( target_name. clone ( ) ) ,
629- name : "id" . to_owned ( ) ,
630- } ) )
631- . and (
632- col ( Column {
633- relation : Some ( source_name. clone ( ) ) ,
634- name : "modified" . to_owned ( ) ,
635- } )
636- . eq ( col ( Column {
637- relation : Some ( target_name. clone ( ) ) ,
638- name : "modified" . to_owned ( ) ,
639- } ) ) ,
602+ let join_predicate = make_join_predicate ( & source_name, & target_name) . and (
603+ col ( Column :: new ( Some ( source_name. clone ( ) ) , "modified" ) )
604+ . eq ( col ( Column :: new ( Some ( target_name. clone ( ) ) , "modified" ) ) ) ,
640605 ) ;
641606
642607 let pred = try_construct_early_filter (
@@ -653,20 +618,9 @@ mod tests {
653618
654619 assert ! ( pred. is_some( ) ) ;
655620
656- let filter = col ( Column {
657- relation : Some ( target_name. clone ( ) ) ,
658- name : "id" . to_owned ( ) ,
659- } )
660- . between (
661- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "B" . to_string ( ) ) ) ) ,
662- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "C" . to_string ( ) ) ) ) ,
663- )
664- . and (
665- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "2023-07-04" . to_string ( ) ) ) ) . eq ( col ( Column {
666- relation : Some ( target_name. clone ( ) ) ,
667- name : "modified" . to_owned ( ) ,
668- } ) ) ,
669- ) ;
621+ let filter = col ( Column :: new ( Some ( target_name. clone ( ) ) , "id" ) )
622+ . between ( lit ( "B" ) , lit ( "C" ) )
623+ . and ( lit ( "2023-07-04" ) . eq ( col ( Column :: new ( Some ( target_name. clone ( ) ) , "modified" ) ) ) ) ;
670624 assert_eq ! ( pred. unwrap( ) , filter) ;
671625 }
672626
@@ -706,18 +660,12 @@ mod tests {
706660 . build ( )
707661 . unwrap ( ) ;
708662
709- let join_predicate = col ( Column {
710- relation : Some ( source_name. clone ( ) ) ,
711- name : "id" . to_owned ( ) ,
712- } )
713- . eq ( col ( Column {
714- relation : Some ( target_name. clone ( ) ) ,
715- name : "id" . to_owned ( ) ,
716- } ) )
717- . and ( col ( "modified" . to_owned ( ) ) . in_list (
718- vec ! [ lit( "2023-07-05" ) , lit( "2023-07-06" ) , lit( "2023-07-07" ) ] ,
719- false ,
720- ) ) ;
663+ let join_predicate = make_join_predicate ( & source_name, & target_name) . and (
664+ col ( "modified" . to_owned ( ) ) . in_list (
665+ vec ! [ lit( "2023-07-05" ) , lit( "2023-07-06" ) , lit( "2023-07-07" ) ] ,
666+ false ,
667+ ) ,
668+ ) ;
721669
722670 let pred = try_construct_early_filter (
723671 join_predicate,
@@ -733,28 +681,12 @@ mod tests {
733681
734682 assert ! ( pred. is_some( ) ) ;
735683
736- let filter = col ( Column {
737- relation : Some ( target_name. clone ( ) ) ,
738- name : "id" . to_owned ( ) ,
739- } )
740- . between (
741- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "A" . to_string ( ) ) ) ) ,
742- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "C" . to_string ( ) ) ) ) ,
743- )
744- . and (
745- col ( Column {
746- relation : None ,
747- name : "modified" . to_owned ( ) ,
748- } )
749- . in_list (
750- vec ! [
751- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "2023-07-05" . to_string( ) ) ) ) ,
752- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "2023-07-06" . to_string( ) ) ) ) ,
753- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "2023-07-07" . to_string( ) ) ) ) ,
754- ] ,
684+ let filter = col ( Column :: new ( Some ( target_name. clone ( ) ) , "id" ) )
685+ . between ( lit ( "A" ) , lit ( "C" ) )
686+ . and ( col ( Column :: new_unqualified ( "modified" ) ) . in_list (
687+ vec ! [ lit( "2023-07-05" ) , lit( "2023-07-06" ) , lit( "2023-07-07" ) ] ,
755688 false ,
756- ) ,
757- ) ;
689+ ) ) ;
758690 assert_eq ! ( pred. unwrap( ) , filter) ;
759691 }
760692
@@ -794,27 +726,15 @@ mod tests {
794726 . build ( )
795727 . unwrap ( ) ;
796728
797- let join_predicate = col ( Column {
798- relation : Some ( source_name. clone ( ) ) ,
799- name : "id" . to_owned ( ) ,
800- } )
801- . eq ( col ( Column {
802- relation : Some ( target_name. clone ( ) ) ,
803- name : "id" . to_owned ( ) ,
804- } ) )
805- . and ( col ( "modified" . to_owned ( ) ) . in_list (
806- vec ! [
807- col( Column {
808- relation: Some ( target_name. clone( ) ) ,
809- name: "id" . to_owned( ) ,
810- } ) ,
811- col( Column {
812- relation: Some ( target_name. clone( ) ) ,
813- name: "modified" . to_owned( ) ,
814- } ) ,
815- ] ,
816- false ,
817- ) ) ;
729+ let join_predicate = make_join_predicate ( & source_name, & target_name) . and (
730+ col ( "modified" . to_owned ( ) ) . in_list (
731+ vec ! [
732+ col( Column :: new( Some ( target_name. clone( ) ) , "id" ) ) ,
733+ col( Column :: new( Some ( target_name. clone( ) ) , "modified" ) ) ,
734+ ] ,
735+ false ,
736+ ) ,
737+ ) ;
818738
819739 let pred = try_construct_early_filter (
820740 join_predicate,
@@ -830,33 +750,15 @@ mod tests {
830750
831751 assert ! ( pred. is_some( ) ) ;
832752
833- let filter = col ( Column {
834- relation : Some ( target_name. clone ( ) ) ,
835- name : "id" . to_owned ( ) ,
836- } )
837- . between (
838- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "A" . to_string ( ) ) ) ) ,
839- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "C" . to_string ( ) ) ) ) ,
840- )
841- . and (
842- col ( Column {
843- relation : None ,
844- name : "modified" . to_owned ( ) ,
845- } )
846- . in_list (
753+ let filter = col ( Column :: new ( Some ( target_name. clone ( ) ) , "id" ) )
754+ . between ( lit ( "A" ) , lit ( "C" ) )
755+ . and ( col ( Column :: new_unqualified ( "modified" ) ) . in_list (
847756 vec ! [
848- col( Column {
849- relation: Some ( target_name. clone( ) ) ,
850- name: "id" . to_owned( ) ,
851- } ) ,
852- col( Column {
853- relation: Some ( target_name. clone( ) ) ,
854- name: "modified" . to_owned( ) ,
855- } ) ,
757+ col( Column :: new( Some ( target_name. clone( ) ) , "id" ) ) ,
758+ col( Column :: new( Some ( target_name. clone( ) ) , "modified" ) ) ,
856759 ] ,
857760 false ,
858- ) ,
859- ) ;
761+ ) ) ;
860762 assert_eq ! ( pred. unwrap( ) , filter) ;
861763 }
862764
@@ -896,27 +798,15 @@ mod tests {
896798 . build ( )
897799 . unwrap ( ) ;
898800
899- let join_predicate = col ( Column {
900- relation : Some ( source_name. clone ( ) ) ,
901- name : "id" . to_owned ( ) ,
902- } )
903- . eq ( col ( Column {
904- relation : Some ( target_name. clone ( ) ) ,
905- name : "id" . to_owned ( ) ,
906- } ) )
907- . and ( ident ( "source.id" ) . in_list (
908- vec ! [
909- col( Column {
910- relation: Some ( target_name. clone( ) ) ,
911- name: "id" . to_owned( ) ,
912- } ) ,
913- col( Column {
914- relation: Some ( target_name. clone( ) ) ,
915- name: "modified" . to_owned( ) ,
916- } ) ,
917- ] ,
918- false ,
919- ) ) ;
801+ let join_predicate = col ( Column :: new ( Some ( source_name. clone ( ) ) , "id" ) )
802+ . eq ( col ( Column :: new ( Some ( target_name. clone ( ) ) , "id" ) ) )
803+ . and ( ident ( "source.id" ) . in_list (
804+ vec ! [
805+ col( Column :: new( Some ( target_name. clone( ) ) , "id" ) ) ,
806+ col( Column :: new( Some ( target_name. clone( ) ) , "modified" ) ) ,
807+ ] ,
808+ false ,
809+ ) ) ;
920810
921811 let pred = try_construct_early_filter (
922812 join_predicate,
@@ -932,27 +822,23 @@ mod tests {
932822
933823 assert ! ( pred. is_some( ) ) ;
934824
935- let filter = col ( Column {
936- relation : Some ( target_name. clone ( ) ) ,
937- name : "id" . to_owned ( ) ,
938- } )
939- . between (
940- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "A" . to_string ( ) ) ) ) ,
941- Expr :: Literal ( ScalarValue :: Utf8 ( Some ( "C" . to_string ( ) ) ) ) ,
942- )
943- . and ( ident ( "source.id" ) . in_list (
944- vec ! [
945- col( Column {
946- relation: Some ( target_name. clone( ) ) ,
947- name: "id" . to_owned( ) ,
948- } ) ,
949- col( Column {
950- relation: Some ( target_name. clone( ) ) ,
951- name: "modified" . to_owned( ) ,
952- } ) ,
953- ] ,
954- false ,
955- ) ) ;
825+ let filter = col ( Column :: new ( Some ( target_name. clone ( ) ) , "id" ) )
826+ . between ( lit ( "A" ) , lit ( "C" ) )
827+ . and ( ident ( "source.id" ) . in_list (
828+ vec ! [
829+ col( Column :: new( Some ( target_name. clone( ) ) , "id" ) ) ,
830+ col( Column :: new( Some ( target_name. clone( ) ) , "modified" ) ) ,
831+ ] ,
832+ false ,
833+ ) ) ;
956834 assert_eq ! ( pred. unwrap( ) , filter) ;
957835 }
836+
837+ /// return a join predicate for the source and target tables
838+ ///
839+ /// `source.id = target.id`
840+ fn make_join_predicate ( source_name : & TableReference , target_name : & TableReference ) -> Expr {
841+ col ( Column :: new ( Some ( source_name. clone ( ) ) , "id" ) )
842+ . eq ( col ( Column :: new ( Some ( target_name. clone ( ) ) , "id" ) ) )
843+ }
958844}
0 commit comments