@@ -2573,13 +2573,45 @@ fn parse_literal_timestamp() {
2573
2573
) ;
2574
2574
}
2575
2575
2576
+ #[ test]
2577
+ fn parse_expr_interval ( ) {
2578
+ let sql = "SELECT INTERVAL HOUR(order_date) HOUR" ;
2579
+ let select = verified_only_select ( sql) ;
2580
+
2581
+ let value = Expr :: Function ( Function {
2582
+ name : ObjectName ( vec ! [ Ident {
2583
+ value: "HOUR" . to_string( ) ,
2584
+ quote_style: None ,
2585
+ } ] ) ,
2586
+ args : vec ! [ FunctionArg :: Unnamed ( FunctionArgExpr :: Expr (
2587
+ Expr :: Identifier ( Ident {
2588
+ value: "order_date" . to_string( ) ,
2589
+ quote_style: None ,
2590
+ } ) ,
2591
+ ) ) ] ,
2592
+ over : None ,
2593
+ distinct : false ,
2594
+ } ) ;
2595
+
2596
+ assert_eq ! (
2597
+ & Expr :: Value ( Value :: Interval {
2598
+ value: Box :: new( value) ,
2599
+ leading_field: Some ( DateTimeField :: Hour ) ,
2600
+ leading_precision: None ,
2601
+ last_field: None ,
2602
+ fractional_seconds_precision: None ,
2603
+ } ) ,
2604
+ expr_from_projection( only( & select. projection) ) ,
2605
+ ) ;
2606
+ }
2607
+
2576
2608
#[ test]
2577
2609
fn parse_literal_interval ( ) {
2578
2610
let sql = "SELECT INTERVAL '1-1' YEAR TO MONTH" ;
2579
2611
let select = verified_only_select ( sql) ;
2580
2612
assert_eq ! (
2581
2613
& Expr :: Value ( Value :: Interval {
2582
- value: "1-1" . into ( ) ,
2614
+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( "1-1" . to_string ( ) ) ) ) ,
2583
2615
leading_field: Some ( DateTimeField :: Year ) ,
2584
2616
leading_precision: None ,
2585
2617
last_field: Some ( DateTimeField :: Month ) ,
@@ -2592,7 +2624,9 @@ fn parse_literal_interval() {
2592
2624
let select = verified_only_select ( sql) ;
2593
2625
assert_eq ! (
2594
2626
& Expr :: Value ( Value :: Interval {
2595
- value: "01:01.01" . into( ) ,
2627
+ value: Box :: new( Expr :: Value ( Value :: SingleQuotedString (
2628
+ "01:01.01" . to_string( )
2629
+ ) ) ) ,
2596
2630
leading_field: Some ( DateTimeField :: Minute ) ,
2597
2631
leading_precision: Some ( 5 ) ,
2598
2632
last_field: Some ( DateTimeField :: Second ) ,
@@ -2605,7 +2639,7 @@ fn parse_literal_interval() {
2605
2639
let select = verified_only_select ( sql) ;
2606
2640
assert_eq ! (
2607
2641
& Expr :: Value ( Value :: Interval {
2608
- value: "1" . into ( ) ,
2642
+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( "1" . to_string ( ) ) ) ) ,
2609
2643
leading_field: Some ( DateTimeField :: Second ) ,
2610
2644
leading_precision: Some ( 5 ) ,
2611
2645
last_field: None ,
@@ -2618,7 +2652,7 @@ fn parse_literal_interval() {
2618
2652
let select = verified_only_select ( sql) ;
2619
2653
assert_eq ! (
2620
2654
& Expr :: Value ( Value :: Interval {
2621
- value: "10" . into ( ) ,
2655
+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( "10" . to_string ( ) ) ) ) ,
2622
2656
leading_field: Some ( DateTimeField :: Hour ) ,
2623
2657
leading_precision: None ,
2624
2658
last_field: None ,
@@ -2631,7 +2665,7 @@ fn parse_literal_interval() {
2631
2665
let select = verified_only_select ( sql) ;
2632
2666
assert_eq ! (
2633
2667
& Expr :: Value ( Value :: Interval {
2634
- value: "10" . into ( ) ,
2668
+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( "10" . to_string ( ) ) ) ) ,
2635
2669
leading_field: Some ( DateTimeField :: Hour ) ,
2636
2670
leading_precision: Some ( 1 ) ,
2637
2671
last_field: None ,
@@ -2644,7 +2678,7 @@ fn parse_literal_interval() {
2644
2678
let select = verified_only_select ( sql) ;
2645
2679
assert_eq ! (
2646
2680
& Expr :: Value ( Value :: Interval {
2647
- value: "1 DAY" . into ( ) ,
2681
+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( "1 DAY" . to_string ( ) ) ) ) ,
2648
2682
leading_field: None ,
2649
2683
leading_precision: None ,
2650
2684
last_field: None ,
0 commit comments