@@ -2649,7 +2649,7 @@ fn parse_literal_interval() {
26492649 let select = verified_only_select ( sql) ;
26502650 assert_eq ! (
26512651 & Expr :: Value ( Value :: Interval {
2652- value: "1-1" . into ( ) ,
2652+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( String :: from ( "1-1" ) ) ) ) ,
26532653 leading_field: Some ( DateTimeField :: Year ) ,
26542654 leading_precision: None ,
26552655 last_field: Some ( DateTimeField :: Month ) ,
@@ -2662,7 +2662,9 @@ fn parse_literal_interval() {
26622662 let select = verified_only_select ( sql) ;
26632663 assert_eq ! (
26642664 & Expr :: Value ( Value :: Interval {
2665- value: "01:01.01" . into( ) ,
2665+ value: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( String :: from(
2666+ "01:01.01"
2667+ ) ) ) ) ,
26662668 leading_field: Some ( DateTimeField :: Minute ) ,
26672669 leading_precision: Some ( 5 ) ,
26682670 last_field: Some ( DateTimeField :: Second ) ,
@@ -2675,7 +2677,7 @@ fn parse_literal_interval() {
26752677 let select = verified_only_select ( sql) ;
26762678 assert_eq ! (
26772679 & Expr :: Value ( Value :: Interval {
2678- value: "1" . into ( ) ,
2680+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( String :: from ( "1" ) ) ) ) ,
26792681 leading_field: Some ( DateTimeField :: Second ) ,
26802682 leading_precision: Some ( 5 ) ,
26812683 last_field: None ,
@@ -2688,7 +2690,7 @@ fn parse_literal_interval() {
26882690 let select = verified_only_select ( sql) ;
26892691 assert_eq ! (
26902692 & Expr :: Value ( Value :: Interval {
2691- value: "10" . into ( ) ,
2693+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( String :: from ( "10" ) ) ) ) ,
26922694 leading_field: Some ( DateTimeField :: Hour ) ,
26932695 leading_precision: None ,
26942696 last_field: None ,
@@ -2697,11 +2699,41 @@ fn parse_literal_interval() {
26972699 expr_from_projection( only( & select. projection) ) ,
26982700 ) ;
26992701
2702+ let sql = "SELECT INTERVAL 5 DAY" ;
2703+ let select = verified_only_select ( sql) ;
2704+ assert_eq ! (
2705+ & Expr :: Value ( Value :: Interval {
2706+ value: Box :: new( Expr :: Value ( number( "5" ) ) ) ,
2707+ leading_field: Some ( DateTimeField :: Day ) ,
2708+ leading_precision: None ,
2709+ last_field: None ,
2710+ fractional_seconds_precision: None ,
2711+ } ) ,
2712+ expr_from_projection( only( & select. projection) ) ,
2713+ ) ;
2714+
2715+ let sql = "SELECT INTERVAL 1 + 1 DAY" ;
2716+ let select = verified_only_select ( sql) ;
2717+ assert_eq ! (
2718+ & Expr :: Value ( Value :: Interval {
2719+ value: Box :: new( Expr :: BinaryOp {
2720+ left: Box :: new( Expr :: Value ( number( "1" ) ) ) ,
2721+ op: BinaryOperator :: Plus ,
2722+ right: Box :: new( Expr :: Value ( number( "1" ) ) )
2723+ } ) ,
2724+ leading_field: Some ( DateTimeField :: Day ) ,
2725+ leading_precision: None ,
2726+ last_field: None ,
2727+ fractional_seconds_precision: None ,
2728+ } ) ,
2729+ expr_from_projection( only( & select. projection) ) ,
2730+ ) ;
2731+
27002732 let sql = "SELECT INTERVAL '10' HOUR (1)" ;
27012733 let select = verified_only_select ( sql) ;
27022734 assert_eq ! (
27032735 & Expr :: Value ( Value :: Interval {
2704- value: "10" . into ( ) ,
2736+ value: Box :: new ( Expr :: Value ( Value :: SingleQuotedString ( String :: from ( "10" ) ) ) ) ,
27052737 leading_field: Some ( DateTimeField :: Hour ) ,
27062738 leading_precision: Some ( 1 ) ,
27072739 last_field: None ,
@@ -2714,7 +2746,9 @@ fn parse_literal_interval() {
27142746 let select = verified_only_select ( sql) ;
27152747 assert_eq ! (
27162748 & Expr :: Value ( Value :: Interval {
2717- value: "1 DAY" . into( ) ,
2749+ value: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( String :: from(
2750+ "1 DAY"
2751+ ) ) ) ) ,
27182752 leading_field: None ,
27192753 leading_precision: None ,
27202754 last_field: None ,
0 commit comments