@@ -497,6 +497,55 @@ fn parse_between() {
497
497
chk ( true ) ;
498
498
}
499
499
500
+ #[ test]
501
+ fn parse_between_with_expr ( ) {
502
+ use self :: ASTNode :: * ;
503
+ use self :: SQLOperator :: * ;
504
+ let sql = "SELECT * FROM t WHERE 1 BETWEEN 1 + 2 AND 3 + 4 IS NULL" ;
505
+ let select = verified_only_select ( sql) ;
506
+ assert_eq ! (
507
+ ASTNode :: SQLIsNull ( Box :: new( ASTNode :: SQLBetween {
508
+ expr: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 1 ) ) ) ,
509
+ low: Box :: new( SQLBinaryExpr {
510
+ left: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 1 ) ) ) ,
511
+ op: Plus ,
512
+ right: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 2 ) ) ) ,
513
+ } ) ,
514
+ high: Box :: new( SQLBinaryExpr {
515
+ left: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 3 ) ) ) ,
516
+ op: Plus ,
517
+ right: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 4 ) ) ) ,
518
+ } ) ,
519
+ negated: false ,
520
+ } ) ) ,
521
+ select. selection. unwrap( )
522
+ ) ;
523
+
524
+ let sql = "SELECT * FROM t WHERE 1 = 1 AND 1 + x BETWEEN 1 AND 2" ;
525
+ let select = verified_only_select ( sql) ;
526
+ assert_eq ! (
527
+ ASTNode :: SQLBinaryExpr {
528
+ left: Box :: new( ASTNode :: SQLBinaryExpr {
529
+ left: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 1 ) ) ) ,
530
+ op: SQLOperator :: Eq ,
531
+ right: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 1 ) ) ) ,
532
+ } ) ,
533
+ op: SQLOperator :: And ,
534
+ right: Box :: new( ASTNode :: SQLBetween {
535
+ expr: Box :: new( ASTNode :: SQLBinaryExpr {
536
+ left: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 1 ) ) ) ,
537
+ op: SQLOperator :: Plus ,
538
+ right: Box :: new( ASTNode :: SQLIdentifier ( "x" . to_string( ) ) ) ,
539
+ } ) ,
540
+ low: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 1 ) ) ) ,
541
+ high: Box :: new( ASTNode :: SQLValue ( Value :: Long ( 2 ) ) ) ,
542
+ negated: false ,
543
+ } ) ,
544
+ } ,
545
+ select. selection. unwrap( ) ,
546
+ )
547
+ }
548
+
500
549
#[ test]
501
550
fn parse_select_order_by ( ) {
502
551
fn chk ( sql : & str ) {
0 commit comments