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:
Armin Primadi 2023-05-10 07:42:03 +07:00 committed by GitHub
parent b29b551fa1
commit f15da8772e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 116 additions and 77 deletions

View file

@ -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,
}),
})),
}),
}),
}),