@@ -10,7 +10,7 @@ use crate::ast::dml::expressions::parentheses::ParenthesesExpression;
10
10
use crate :: ast:: dml:: expressions:: unary:: UnaryOperatorExpression ;
11
11
use crate :: ast:: dml:: parts:: select_item:: SelectItem ;
12
12
use crate :: ast:: dml:: select:: SelectQuery ;
13
- use crate :: ast:: types:: { ConditionalFunction , SQLExpression , UserDefinedFunction } ;
13
+ use crate :: ast:: types:: { ConditionalFunction , SQLExpression , SelectColumn , UserDefinedFunction } ;
14
14
use crate :: lexer:: predule:: OperatorToken ;
15
15
use crate :: lexer:: tokens:: Token ;
16
16
use crate :: parser:: predule:: Parser ;
@@ -657,6 +657,77 @@ fn test_parse_expression() {
657
657
. into( ) ,
658
658
want_error: false ,
659
659
} ,
660
+ TestCase {
661
+ name: r#"foo between 1 and 5"# . into( ) ,
662
+ input: vec![
663
+ Token :: Identifier ( "foo" . to_owned( ) ) ,
664
+ Token :: Between ,
665
+ Token :: Integer ( 1 ) ,
666
+ Token :: And ,
667
+ Token :: Integer ( 5 ) ,
668
+ ] ,
669
+ expected: BetweenExpression {
670
+ a: SQLExpression :: SelectColumn ( SelectColumn :: new( None , "foo" . to_owned( ) ) ) ,
671
+ x: SQLExpression :: Integer ( 1 ) ,
672
+ y: SQLExpression :: Integer ( 5 ) ,
673
+ }
674
+ . into( ) ,
675
+ want_error: false ,
676
+ } ,
677
+ TestCase {
678
+ name: r#"foo(1) + 10"# . into( ) ,
679
+ input: vec![
680
+ Token :: Identifier ( "foo" . to_owned( ) ) ,
681
+ Token :: LeftParentheses ,
682
+ Token :: Integer ( 1 ) ,
683
+ Token :: RightParentheses ,
684
+ Token :: Operator ( OperatorToken :: Plus ) ,
685
+ Token :: Integer ( 10 ) ,
686
+ ] ,
687
+ expected: BinaryOperatorExpression {
688
+ operator: BinaryOperator :: Add ,
689
+ lhs: CallExpression {
690
+ function: UserDefinedFunction {
691
+ database_name: None ,
692
+ function_name: "foo" . into( ) ,
693
+ }
694
+ . into( ) ,
695
+ arguments: vec![ SQLExpression :: Integer ( 1 ) ] ,
696
+ }
697
+ . into( ) ,
698
+ rhs: SQLExpression :: Integer ( 10 ) ,
699
+ }
700
+ . into( ) ,
701
+ want_error: false ,
702
+ } ,
703
+ TestCase {
704
+ name: r#"foo(1) BETWEEN 1 and 5"# . into( ) ,
705
+ input: vec![
706
+ Token :: Identifier ( "foo" . to_owned( ) ) ,
707
+ Token :: LeftParentheses ,
708
+ Token :: Integer ( 1 ) ,
709
+ Token :: RightParentheses ,
710
+ Token :: Between ,
711
+ Token :: Integer ( 1 ) ,
712
+ Token :: And ,
713
+ Token :: Integer ( 5 ) ,
714
+ ] ,
715
+ expected: BetweenExpression {
716
+ a: CallExpression {
717
+ function: UserDefinedFunction {
718
+ database_name: None ,
719
+ function_name: "foo" . into( ) ,
720
+ }
721
+ . into( ) ,
722
+ arguments: vec![ SQLExpression :: Integer ( 1 ) ] ,
723
+ }
724
+ . into( ) ,
725
+ x: SQLExpression :: Integer ( 1 ) ,
726
+ y: SQLExpression :: Integer ( 5 ) ,
727
+ }
728
+ . into( ) ,
729
+ want_error: false ,
730
+ } ,
660
731
TestCase {
661
732
name: "오류: * 5" . into( ) ,
662
733
input: vec![ Token :: Operator ( OperatorToken :: Asterisk ) , Token :: Integer ( 5 ) ] ,
@@ -669,6 +740,18 @@ fn test_parse_expression() {
669
740
expected: Default :: default ( ) ,
670
741
want_error: true ,
671
742
} ,
743
+ TestCase {
744
+ name: "오류: )" . into( ) ,
745
+ input: vec![ Token :: RightParentheses ] ,
746
+ expected: Default :: default ( ) ,
747
+ want_error: true ,
748
+ } ,
749
+ TestCase {
750
+ name: "오류: DELETE" . into( ) ,
751
+ input: vec![ Token :: Delete ] ,
752
+ expected: Default :: default ( ) ,
753
+ want_error: true ,
754
+ } ,
672
755
] ;
673
756
674
757
for t in test_cases {
0 commit comments