Test that redundant nesting is supported

SELECT * FROM (((SELECT 1))) is just as valid as
SELECT * FROM (SELECT 1). Add a test to ensure that we can parse the
first form.

Addresses a comment from #100.
This commit is contained in:
Nikhil Benesch 2019-06-07 22:45:12 -04:00
parent 5f9f17de8a
commit ccbd048dda
No known key found for this signature in database
GPG key ID: F7386C5DEADABA7F

View file

@ -1466,7 +1466,7 @@ fn parse_join_nesting() {
} }
macro_rules! nest { macro_rules! nest {
($base:expr, $($join:expr),*) => { ($base:expr $(, $join:expr)*) => {
TableFactor::NestedJoin { TableFactor::NestedJoin {
base: Box::new($base), base: Box::new($base),
joins: vec![$(join($join)),*] joins: vec![$(join($join)),*]
@ -1487,7 +1487,23 @@ fn parse_join_nesting() {
let sql = "SELECT * FROM (a NATURAL JOIN b) NATURAL JOIN c"; let sql = "SELECT * FROM (a NATURAL JOIN b) NATURAL JOIN c";
let select = verified_only_select(sql); let select = verified_only_select(sql);
assert_eq!(select.relation.unwrap(), nest!(table("a"), table("b")),); assert_eq!(select.relation.unwrap(), nest!(table("a"), table("b")),);
assert_eq!(select.joins, vec![join(table("c"))],) assert_eq!(select.joins, vec![join(table("c"))]);
let sql = "SELECT * FROM (((a NATURAL JOIN b)))";
let select = verified_only_select(sql);
assert_eq!(
select.relation.unwrap(),
nest!(nest!(nest!(table("a"), table("b"))))
);
assert_eq!(select.joins, vec![]);
let sql = "SELECT * FROM a NATURAL JOIN (((b NATURAL JOIN c)))";
let select = verified_only_select(sql);
assert_eq!(select.relation.unwrap(), table("a"));
assert_eq!(
select.joins,
vec![join(nest!(nest!(nest!(table("b"), table("c")))))]
);
} }
#[test] #[test]
@ -1586,6 +1602,14 @@ fn parse_derived_tables() {
CROSS JOIN (SELECT y FROM bar) AS b (y)"; CROSS JOIN (SELECT y FROM bar) AS b (y)";
let _ = verified_only_select(sql); let _ = verified_only_select(sql);
//TODO: add assertions //TODO: add assertions
let sql = "SELECT * FROM (((SELECT 1)))";
let _ = verified_only_select(sql);
// TODO: add assertions
let sql = "SELECT * FROM t NATURAL JOIN (((SELECT 1)))";
let _ = verified_only_select(sql);
// TODO: add assertions
} }
#[test] #[test]