@@ -262,6 +262,74 @@ fn test_parse_expression() {
262
262
. into( ) ,
263
263
want_error: false ,
264
264
} ,
265
+ TestCase {
266
+ name: "3.0 between 1.2 and 5.3" . into( ) ,
267
+ input: vec![
268
+ Token :: Float ( 3.0 ) ,
269
+ Token :: Between ,
270
+ Token :: Float ( 1.2 ) ,
271
+ Token :: And ,
272
+ Token :: Float ( 5.3 ) ,
273
+ ] ,
274
+ expected: BetweenExpression {
275
+ a: SQLExpression :: Float ( 3.0 ) ,
276
+ x: SQLExpression :: Float ( 1.2 ) ,
277
+ y: SQLExpression :: Float ( 5.3 ) ,
278
+ }
279
+ . into( ) ,
280
+ want_error: false ,
281
+ } ,
282
+ TestCase {
283
+ name: r#""foo" between "3" and "4""# . into( ) ,
284
+ input: vec![
285
+ Token :: String ( "foo" . to_owned( ) ) ,
286
+ Token :: Between ,
287
+ Token :: String ( "3" . to_owned( ) ) ,
288
+ Token :: And ,
289
+ Token :: String ( "4" . to_owned( ) ) ,
290
+ ] ,
291
+ expected: BetweenExpression {
292
+ a: SQLExpression :: String ( "foo" . to_owned( ) ) ,
293
+ x: SQLExpression :: String ( "3" . to_owned( ) ) ,
294
+ y: SQLExpression :: String ( "4" . to_owned( ) ) ,
295
+ }
296
+ . into( ) ,
297
+ want_error: false ,
298
+ } ,
299
+ TestCase {
300
+ name: r#"true between false and false"# . into( ) ,
301
+ input: vec![
302
+ Token :: Boolean ( true ) ,
303
+ Token :: Between ,
304
+ Token :: Boolean ( false ) ,
305
+ Token :: And ,
306
+ Token :: Boolean ( false ) ,
307
+ ] ,
308
+ expected: BetweenExpression {
309
+ a: SQLExpression :: Boolean ( true ) ,
310
+ x: SQLExpression :: Boolean ( false ) ,
311
+ y: SQLExpression :: Boolean ( false ) ,
312
+ }
313
+ . into( ) ,
314
+ want_error: false ,
315
+ } ,
316
+ TestCase {
317
+ name: r#"null between null and null"# . into( ) ,
318
+ input: vec![
319
+ Token :: Null ,
320
+ Token :: Between ,
321
+ Token :: Null ,
322
+ Token :: And ,
323
+ Token :: Null ,
324
+ ] ,
325
+ expected: BetweenExpression {
326
+ a: SQLExpression :: Null ,
327
+ x: SQLExpression :: Null ,
328
+ y: SQLExpression :: Null ,
329
+ }
330
+ . into( ) ,
331
+ want_error: false ,
332
+ } ,
265
333
TestCase {
266
334
name: "3 between 1 and 5 + 1" . into( ) ,
267
335
input: vec![
@@ -449,6 +517,78 @@ fn test_parse_expression() {
449
517
. into( ) ,
450
518
want_error: false ,
451
519
} ,
520
+ TestCase {
521
+ name: "3.14 + 4.4" . into( ) ,
522
+ input: vec![
523
+ Token :: Float ( 3.14 ) ,
524
+ Token :: Operator ( OperatorToken :: Plus ) ,
525
+ Token :: Float ( 4.4 ) ,
526
+ ] ,
527
+ expected: BinaryOperatorExpression {
528
+ operator: BinaryOperator :: Add ,
529
+ lhs: SQLExpression :: Float ( 3.14 ) ,
530
+ rhs: SQLExpression :: Float ( 4.4 ) ,
531
+ }
532
+ . into( ) ,
533
+ want_error: false ,
534
+ } ,
535
+ TestCase {
536
+ name: r#""3.14" + "4.4""# . into( ) ,
537
+ input: vec![
538
+ Token :: String ( "3.14" . to_owned( ) ) ,
539
+ Token :: Operator ( OperatorToken :: Plus ) ,
540
+ Token :: String ( "4.4" . to_owned( ) ) ,
541
+ ] ,
542
+ expected: BinaryOperatorExpression {
543
+ operator: BinaryOperator :: Add ,
544
+ lhs: SQLExpression :: String ( "3.14" . to_owned( ) ) ,
545
+ rhs: SQLExpression :: String ( "4.4" . to_owned( ) ) ,
546
+ }
547
+ . into( ) ,
548
+ want_error: false ,
549
+ } ,
550
+ TestCase {
551
+ name: r#"true + false"# . into( ) ,
552
+ input: vec![
553
+ Token :: Boolean ( true ) ,
554
+ Token :: Operator ( OperatorToken :: Plus ) ,
555
+ Token :: Boolean ( false ) ,
556
+ ] ,
557
+ expected: BinaryOperatorExpression {
558
+ operator: BinaryOperator :: Add ,
559
+ lhs: SQLExpression :: Boolean ( true ) ,
560
+ rhs: SQLExpression :: Boolean ( false ) ,
561
+ }
562
+ . into( ) ,
563
+ want_error: false ,
564
+ } ,
565
+ TestCase {
566
+ name: r#"null + null"# . into( ) ,
567
+ input: vec![
568
+ Token :: Null ,
569
+ Token :: Operator ( OperatorToken :: Plus ) ,
570
+ Token :: Null ,
571
+ ] ,
572
+ expected: BinaryOperatorExpression {
573
+ operator: BinaryOperator :: Add ,
574
+ lhs: SQLExpression :: Null ,
575
+ rhs: SQLExpression :: Null ,
576
+ }
577
+ . into( ) ,
578
+ want_error: false ,
579
+ } ,
580
+ TestCase {
581
+ name: "오류: * 5" . into( ) ,
582
+ input: vec![ Token :: Operator ( OperatorToken :: Asterisk ) , Token :: Integer ( 5 ) ] ,
583
+ expected: Default :: default ( ) ,
584
+ want_error: true ,
585
+ } ,
586
+ TestCase {
587
+ name: "오류: (" . into( ) ,
588
+ input: vec![ Token :: LeftParentheses ] ,
589
+ expected: Default :: default ( ) ,
590
+ want_error: true ,
591
+ } ,
452
592
] ;
453
593
454
594
for t in test_cases {
0 commit comments