Skip to content

Commit 66bff99

Browse files
committed
version as of time-travel support
1 parent 3af9988 commit 66bff99

3 files changed

Lines changed: 16 additions & 0 deletions

File tree

src/ast/query.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2245,6 +2245,10 @@ pub enum TableVersion {
22452245
/// Databricks supports this syntax.
22462246
/// For example: `SELECT * FROM tbl TIMESTAMP AS OF CURRENT_TIMESTAMP() - INTERVAL 1 HOUR`
22472247
TimestampAsOf(Expr),
2248+
/// When the table version is defined using `VERSION AS OF`.
2249+
/// Databricks supports this syntax.
2250+
/// For example: `SELECT * FROM tbl VERSION AS OF 2`
2251+
VersionAsOf(Expr),
22482252
/// When the table version is defined using a function.
22492253
/// For example: `SELECT * FROM tbl AT(TIMESTAMP => '2020-08-14 09:30:00')`
22502254
Function(Expr),
@@ -2255,6 +2259,7 @@ impl Display for TableVersion {
22552259
match self {
22562260
TableVersion::ForSystemTimeAsOf(e) => write!(f, "FOR SYSTEM_TIME AS OF {e}")?,
22572261
TableVersion::TimestampAsOf(e) => write!(f, "TIMESTAMP AS OF {e}")?,
2262+
TableVersion::VersionAsOf(e) => write!(f, "VERSION AS OF {e}")?,
22582263
TableVersion::Function(func) => write!(f, "{func}")?,
22592264
}
22602265
Ok(())

src/parser/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15496,6 +15496,9 @@ impl<'a> Parser<'a> {
1549615496
} else if self.parse_keywords(&[Keyword::TIMESTAMP, Keyword::AS, Keyword::OF]) {
1549715497
let expr = self.parse_expr()?;
1549815498
return Ok(Some(TableVersion::TimestampAsOf(expr)));
15499+
} else if self.parse_keywords(&[Keyword::VERSION, Keyword::AS, Keyword::OF]) {
15500+
let expr = Expr::Value(self.parse_number_value()?);
15501+
return Ok(Some(TableVersion::VersionAsOf(expr)));
1549915502
}
1550015503
}
1550115504
Ok(None)

tests/sqlparser_databricks.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,15 @@ fn parse_table_time_travel() {
376376
"SELECT 1 FROM t1 TIMESTAMP AS OF CURRENT_TIMESTAMP() - INTERVAL 12 HOURS",
377377
);
378378

379+
all_dialects_where(|d| d.supports_timestamp_versioning()).verified_only_select(
380+
"SELECT 1 FROM t1 VERSION AS OF 1",
381+
);
382+
379383
assert!(databricks()
380384
.parse_sql_statements("SELECT 1 FROM t1 FOR TIMESTAMP AS OF 'some_timestamp'")
381385
.is_err());
386+
387+
assert!(all_dialects_where(|d| d.supports_timestamp_versioning()).parse_sql_statements(
388+
"SELECT 1 FROM t1 VERSION AS OF 1 - 2",
389+
).is_err())
382390
}

0 commit comments

Comments
 (0)