@@ -63,6 +63,7 @@ fn parse_map_access_expr() {
6363 joins: vec![ ] ,
6464 } ] ,
6565 lateral_views: vec![ ] ,
66+ prewhere: None ,
6667 selection: Some ( BinaryOp {
6768 left: Box :: new( BinaryOp {
6869 left: Box :: new( Identifier ( Ident :: new( "id" ) ) ) ,
@@ -717,6 +718,56 @@ fn parse_group_by_with_modifier() {
717718 }
718719}
719720
721+ #[ test]
722+ fn test_prewhere ( ) {
723+ match clickhouse_and_generic ( ) . verified_stmt ( "SELECT * FROM t PREWHERE x = 1 WHERE y = 2" ) {
724+ Statement :: Query ( query) => {
725+ let prewhere = query. body . as_select ( ) . unwrap ( ) . prewhere . as_ref ( ) ;
726+ assert_eq ! (
727+ prewhere,
728+ Some ( & BinaryOp {
729+ left: Box :: new( Identifier ( Ident :: new( "x" ) ) ) ,
730+ op: BinaryOperator :: Eq ,
731+ right: Box :: new( Expr :: Value ( Value :: Number ( "1" . parse( ) . unwrap( ) , false ) ) ) ,
732+ } )
733+ ) ;
734+ let selection = query. as_ref ( ) . body . as_select ( ) . unwrap ( ) . selection . as_ref ( ) ;
735+ assert_eq ! (
736+ selection,
737+ Some ( & BinaryOp {
738+ left: Box :: new( Identifier ( Ident :: new( "y" ) ) ) ,
739+ op: BinaryOperator :: Eq ,
740+ right: Box :: new( Expr :: Value ( Value :: Number ( "2" . parse( ) . unwrap( ) , false ) ) ) ,
741+ } )
742+ ) ;
743+ }
744+ _ => unreachable ! ( ) ,
745+ }
746+
747+ match clickhouse_and_generic ( ) . verified_stmt ( "SELECT * FROM t PREWHERE x = 1 AND y = 2" ) {
748+ Statement :: Query ( query) => {
749+ let prewhere = query. body . as_select ( ) . unwrap ( ) . prewhere . as_ref ( ) ;
750+ assert_eq ! (
751+ prewhere,
752+ Some ( & BinaryOp {
753+ left: Box :: new( BinaryOp {
754+ left: Box :: new( Identifier ( Ident :: new( "x" ) ) ) ,
755+ op: BinaryOperator :: Eq ,
756+ right: Box :: new( Expr :: Value ( Value :: Number ( "1" . parse( ) . unwrap( ) , false ) ) ) ,
757+ } ) ,
758+ op: BinaryOperator :: And ,
759+ right: Box :: new( BinaryOp {
760+ left: Box :: new( Identifier ( Ident :: new( "y" ) ) ) ,
761+ op: BinaryOperator :: Eq ,
762+ right: Box :: new( Expr :: Value ( Value :: Number ( "2" . parse( ) . unwrap( ) , false ) ) ) ,
763+ } ) ,
764+ } )
765+ ) ;
766+ }
767+ _ => unreachable ! ( ) ,
768+ }
769+ }
770+
720771fn clickhouse ( ) -> TestedDialects {
721772 TestedDialects {
722773 dialects : vec ! [ Box :: new( ClickHouseDialect { } ) ] ,
0 commit comments