Table time travel clause support, add visit_table_factor to Visitor (#951)

This commit is contained in:
Marko Grujic 2023-08-22 12:06:32 +02:00 committed by GitHub
parent 9500649c35
commit 1ea8858575
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 225 additions and 12 deletions

View file

@ -42,6 +42,31 @@ fn parse_mssql_identifiers() {
};
}
#[test]
fn parse_table_time_travel() {
let version = "2023-08-18 23:08:18".to_string();
let sql = format!("SELECT 1 FROM t1 FOR SYSTEM_TIME AS OF '{version}'");
let select = ms().verified_only_select(&sql);
assert_eq!(
select.from,
vec![TableWithJoins {
relation: TableFactor::Table {
name: ObjectName(vec![Ident::new("t1")]),
alias: None,
args: None,
with_hints: vec![],
version: Some(TableVersion::ForSystemTimeAsOf(Expr::Value(
Value::SingleQuotedString(version)
))),
},
joins: vec![]
},]
);
let sql = "SELECT 1 FROM t1 FOR SYSTEM TIME AS OF 'some_timestamp'".to_string();
assert!(ms().parse_sql_statements(&sql).is_err());
}
#[test]
fn parse_mssql_single_quoted_aliases() {
let _ = ms_and_generic().one_statement_parses_to("SELECT foo 'alias'", "SELECT foo AS 'alias'");
@ -283,11 +308,13 @@ fn parse_delimited_identifiers() {
alias,
args,
with_hints,
version,
} => {
assert_eq!(vec![Ident::with_quote('"', "a table")], name.0);
assert_eq!(Ident::with_quote('"', "alias"), alias.unwrap().name);
assert!(args.is_none());
assert!(with_hints.is_empty());
assert!(version.is_none());
}
_ => panic!("Expecting TableFactor::Table"),
}
@ -485,7 +512,8 @@ fn parse_substring_in_select() {
}]),
alias: None,
args: None,
with_hints: vec![]
with_hints: vec![],
version: None,
},
joins: vec![]
}],