mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-16 04:54:59 +00:00
fix: Support expr
instead of string
for argument to interval
(#517)
* fix: use expr instead of string in interval * chore: resolve CI Co-authored-by: togami2864 <yoshiaki.togami@plaid.co.jp>
This commit is contained in:
parent
99697d26e1
commit
d981f70143
3 changed files with 52 additions and 15 deletions
|
@ -2649,7 +2649,7 @@ fn parse_literal_interval() {
|
|||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Interval {
|
||||
value: "1-1".into(),
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from("1-1")))),
|
||||
leading_field: Some(DateTimeField::Year),
|
||||
leading_precision: None,
|
||||
last_field: Some(DateTimeField::Month),
|
||||
|
@ -2662,7 +2662,9 @@ fn parse_literal_interval() {
|
|||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Interval {
|
||||
value: "01:01.01".into(),
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from(
|
||||
"01:01.01"
|
||||
)))),
|
||||
leading_field: Some(DateTimeField::Minute),
|
||||
leading_precision: Some(5),
|
||||
last_field: Some(DateTimeField::Second),
|
||||
|
@ -2675,7 +2677,7 @@ fn parse_literal_interval() {
|
|||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Interval {
|
||||
value: "1".into(),
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from("1")))),
|
||||
leading_field: Some(DateTimeField::Second),
|
||||
leading_precision: Some(5),
|
||||
last_field: None,
|
||||
|
@ -2688,7 +2690,7 @@ fn parse_literal_interval() {
|
|||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Interval {
|
||||
value: "10".into(),
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from("10")))),
|
||||
leading_field: Some(DateTimeField::Hour),
|
||||
leading_precision: None,
|
||||
last_field: None,
|
||||
|
@ -2697,11 +2699,41 @@ fn parse_literal_interval() {
|
|||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
let sql = "SELECT INTERVAL 5 DAY";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Interval {
|
||||
value: Box::new(Expr::Value(number("5"))),
|
||||
leading_field: Some(DateTimeField::Day),
|
||||
leading_precision: None,
|
||||
last_field: None,
|
||||
fractional_seconds_precision: None,
|
||||
}),
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
let sql = "SELECT INTERVAL 1 + 1 DAY";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Interval {
|
||||
value: Box::new(Expr::BinaryOp {
|
||||
left: Box::new(Expr::Value(number("1"))),
|
||||
op: BinaryOperator::Plus,
|
||||
right: Box::new(Expr::Value(number("1")))
|
||||
}),
|
||||
leading_field: Some(DateTimeField::Day),
|
||||
leading_precision: None,
|
||||
last_field: None,
|
||||
fractional_seconds_precision: None,
|
||||
}),
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
let sql = "SELECT INTERVAL '10' HOUR (1)";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Interval {
|
||||
value: "10".into(),
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from("10")))),
|
||||
leading_field: Some(DateTimeField::Hour),
|
||||
leading_precision: Some(1),
|
||||
last_field: None,
|
||||
|
@ -2714,7 +2746,9 @@ fn parse_literal_interval() {
|
|||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Interval {
|
||||
value: "1 DAY".into(),
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from(
|
||||
"1 DAY"
|
||||
)))),
|
||||
leading_field: None,
|
||||
leading_precision: None,
|
||||
last_field: None,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue