@@ -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 ;
@@ -286,6 +286,35 @@ fn test_parse_expression() {
286
286
. into( ) ,
287
287
want_error: false ,
288
288
} ,
289
+ TestCase {
290
+ name: "(3 + 1) BETWEEN 2 AND 44" . into( ) ,
291
+ input: vec![
292
+ Token :: LeftParentheses ,
293
+ Token :: Integer ( 3 ) ,
294
+ Token :: Operator ( OperatorToken :: Plus ) ,
295
+ Token :: Integer ( 1 ) ,
296
+ Token :: RightParentheses ,
297
+ Token :: Between ,
298
+ Token :: Integer ( 2 ) ,
299
+ Token :: And ,
300
+ Token :: Integer ( 44 ) ,
301
+ ] ,
302
+ expected: BetweenExpression {
303
+ a: ParenthesesExpression {
304
+ expression: BinaryOperatorExpression {
305
+ operator: BinaryOperator :: Add ,
306
+ lhs: SQLExpression :: Integer ( 3 ) ,
307
+ rhs: SQLExpression :: Integer ( 1 ) ,
308
+ }
309
+ . into( ) ,
310
+ }
311
+ . into( ) ,
312
+ x: SQLExpression :: Integer ( 2 ) ,
313
+ y: SQLExpression :: Integer ( 44 ) ,
314
+ }
315
+ . into( ) ,
316
+ want_error: false ,
317
+ } ,
289
318
TestCase {
290
319
name: "3.0 between 1.2 and 5.3" . into( ) ,
291
320
input: vec![
@@ -657,6 +686,77 @@ fn test_parse_expression() {
657
686
. into( ) ,
658
687
want_error: false ,
659
688
} ,
689
+ TestCase {
690
+ name: r#"foo between 1 and 5"# . into( ) ,
691
+ input: vec![
692
+ Token :: Identifier ( "foo" . to_owned( ) ) ,
693
+ Token :: Between ,
694
+ Token :: Integer ( 1 ) ,
695
+ Token :: And ,
696
+ Token :: Integer ( 5 ) ,
697
+ ] ,
698
+ expected: BetweenExpression {
699
+ a: SQLExpression :: SelectColumn ( SelectColumn :: new( None , "foo" . to_owned( ) ) ) ,
700
+ x: SQLExpression :: Integer ( 1 ) ,
701
+ y: SQLExpression :: Integer ( 5 ) ,
702
+ }
703
+ . into( ) ,
704
+ want_error: false ,
705
+ } ,
706
+ TestCase {
707
+ name: r#"foo(1) + 10"# . into( ) ,
708
+ input: vec![
709
+ Token :: Identifier ( "foo" . to_owned( ) ) ,
710
+ Token :: LeftParentheses ,
711
+ Token :: Integer ( 1 ) ,
712
+ Token :: RightParentheses ,
713
+ Token :: Operator ( OperatorToken :: Plus ) ,
714
+ Token :: Integer ( 10 ) ,
715
+ ] ,
716
+ expected: BinaryOperatorExpression {
717
+ operator: BinaryOperator :: Add ,
718
+ lhs: CallExpression {
719
+ function: UserDefinedFunction {
720
+ database_name: None ,
721
+ function_name: "foo" . into( ) ,
722
+ }
723
+ . into( ) ,
724
+ arguments: vec![ SQLExpression :: Integer ( 1 ) ] ,
725
+ }
726
+ . into( ) ,
727
+ rhs: SQLExpression :: Integer ( 10 ) ,
728
+ }
729
+ . into( ) ,
730
+ want_error: false ,
731
+ } ,
732
+ TestCase {
733
+ name: r#"foo(1) BETWEEN 1 and 5"# . into( ) ,
734
+ input: vec![
735
+ Token :: Identifier ( "foo" . to_owned( ) ) ,
736
+ Token :: LeftParentheses ,
737
+ Token :: Integer ( 1 ) ,
738
+ Token :: RightParentheses ,
739
+ Token :: Between ,
740
+ Token :: Integer ( 1 ) ,
741
+ Token :: And ,
742
+ Token :: Integer ( 5 ) ,
743
+ ] ,
744
+ expected: BetweenExpression {
745
+ a: CallExpression {
746
+ function: UserDefinedFunction {
747
+ database_name: None ,
748
+ function_name: "foo" . into( ) ,
749
+ }
750
+ . into( ) ,
751
+ arguments: vec![ SQLExpression :: Integer ( 1 ) ] ,
752
+ }
753
+ . into( ) ,
754
+ x: SQLExpression :: Integer ( 1 ) ,
755
+ y: SQLExpression :: Integer ( 5 ) ,
756
+ }
757
+ . into( ) ,
758
+ want_error: false ,
759
+ } ,
660
760
TestCase {
661
761
name: "오류: * 5" . into( ) ,
662
762
input: vec![ Token :: Operator ( OperatorToken :: Asterisk ) , Token :: Integer ( 5 ) ] ,
@@ -669,6 +769,18 @@ fn test_parse_expression() {
669
769
expected: Default :: default ( ) ,
670
770
want_error: true ,
671
771
} ,
772
+ TestCase {
773
+ name: "오류: )" . into( ) ,
774
+ input: vec![ Token :: RightParentheses ] ,
775
+ expected: Default :: default ( ) ,
776
+ want_error: true ,
777
+ } ,
778
+ TestCase {
779
+ name: "오류: DELETE" . into( ) ,
780
+ input: vec![ Token :: Delete ] ,
781
+ expected: Default :: default ( ) ,
782
+ want_error: true ,
783
+ } ,
672
784
] ;
673
785
674
786
for t in test_cases {
0 commit comments