mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-03 13:58:15 +00:00
Make Expr::Interval its own struct (#872)
* Make Expr::Interval its own struct * Add test interval display * Fix cargo fmt
This commit is contained in:
parent
b29b551fa1
commit
f15da8772e
3 changed files with 116 additions and 77 deletions
|
@ -3395,20 +3395,20 @@ fn parse_interval() {
|
|||
let sql = "SELECT INTERVAL '1-1' YEAR TO MONTH";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Interval {
|
||||
&Expr::Interval(Interval {
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from("1-1")))),
|
||||
leading_field: Some(DateTimeField::Year),
|
||||
leading_precision: None,
|
||||
last_field: Some(DateTimeField::Month),
|
||||
fractional_seconds_precision: None,
|
||||
},
|
||||
}),
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
let sql = "SELECT INTERVAL '01:01.01' MINUTE (5) TO SECOND (5)";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Interval {
|
||||
&Expr::Interval(Interval {
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from(
|
||||
"01:01.01"
|
||||
)))),
|
||||
|
@ -3416,53 +3416,53 @@ fn parse_interval() {
|
|||
leading_precision: Some(5),
|
||||
last_field: Some(DateTimeField::Second),
|
||||
fractional_seconds_precision: Some(5),
|
||||
},
|
||||
}),
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
let sql = "SELECT INTERVAL '1' SECOND (5, 4)";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Interval {
|
||||
&Expr::Interval(Interval {
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from("1")))),
|
||||
leading_field: Some(DateTimeField::Second),
|
||||
leading_precision: Some(5),
|
||||
last_field: None,
|
||||
fractional_seconds_precision: Some(4),
|
||||
},
|
||||
}),
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
let sql = "SELECT INTERVAL '10' HOUR";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Interval {
|
||||
&Expr::Interval(Interval {
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from("10")))),
|
||||
leading_field: Some(DateTimeField::Hour),
|
||||
leading_precision: None,
|
||||
last_field: None,
|
||||
fractional_seconds_precision: None,
|
||||
},
|
||||
}),
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
let sql = "SELECT INTERVAL 5 DAY";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Interval {
|
||||
&Expr::Interval(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::Interval {
|
||||
&Expr::Interval(Interval {
|
||||
value: Box::new(Expr::BinaryOp {
|
||||
left: Box::new(Expr::Value(number("1"))),
|
||||
op: BinaryOperator::Plus,
|
||||
|
@ -3472,27 +3472,27 @@ fn parse_interval() {
|
|||
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::Interval {
|
||||
&Expr::Interval(Interval {
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from("10")))),
|
||||
leading_field: Some(DateTimeField::Hour),
|
||||
leading_precision: Some(1),
|
||||
last_field: None,
|
||||
fractional_seconds_precision: None,
|
||||
},
|
||||
}),
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
let sql = "SELECT INTERVAL '1 DAY'";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::Interval {
|
||||
&Expr::Interval(Interval {
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(String::from(
|
||||
"1 DAY"
|
||||
)))),
|
||||
|
@ -3500,7 +3500,7 @@ fn parse_interval() {
|
|||
leading_precision: None,
|
||||
last_field: None,
|
||||
fractional_seconds_precision: None,
|
||||
},
|
||||
}),
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
|
@ -3581,7 +3581,7 @@ fn parse_interval_and_or_xor() {
|
|||
quote_style: None,
|
||||
})),
|
||||
op: BinaryOperator::Plus,
|
||||
right: Box::new(Expr::Interval {
|
||||
right: Box::new(Expr::Interval(Interval {
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(
|
||||
"5 days".to_string(),
|
||||
))),
|
||||
|
@ -3589,7 +3589,7 @@ fn parse_interval_and_or_xor() {
|
|||
leading_precision: None,
|
||||
last_field: None,
|
||||
fractional_seconds_precision: None,
|
||||
}),
|
||||
})),
|
||||
}),
|
||||
}),
|
||||
op: BinaryOperator::And,
|
||||
|
@ -3605,7 +3605,7 @@ fn parse_interval_and_or_xor() {
|
|||
quote_style: None,
|
||||
})),
|
||||
op: BinaryOperator::Plus,
|
||||
right: Box::new(Expr::Interval {
|
||||
right: Box::new(Expr::Interval(Interval {
|
||||
value: Box::new(Expr::Value(Value::SingleQuotedString(
|
||||
"3 days".to_string(),
|
||||
))),
|
||||
|
@ -3613,7 +3613,7 @@ fn parse_interval_and_or_xor() {
|
|||
leading_precision: None,
|
||||
last_field: None,
|
||||
fractional_seconds_precision: None,
|
||||
}),
|
||||
})),
|
||||
}),
|
||||
}),
|
||||
}),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue