@@ -11208,7 +11208,7 @@ impl<'a> Parser<'a> {
11208
11208
};
11209
11209
11210
11210
// Parse potential version qualifier
11211
- let version = self.parse_table_version ()?;
11211
+ let version = self.maybe_parse_table_version ()?;
11212
11212
11213
11213
// Postgres, MSSQL, ClickHouse: table-valued functions:
11214
11214
let args = if self.consume_token(&Token::LParen) {
@@ -11639,18 +11639,20 @@ impl<'a> Parser<'a> {
11639
11639
}
11640
11640
}
11641
11641
11642
- /// Parse a given table version specifier.
11643
- ///
11644
- /// For now it only supports timestamp versioning for BigQuery and MSSQL dialects.
11645
- pub fn parse_table_version(&mut self) -> Result<Option<TableVersion>, ParserError> {
11646
- if dialect_of!(self is BigQueryDialect | MsSqlDialect)
11647
- && self.parse_keywords(&[Keyword::FOR, Keyword::SYSTEM_TIME, Keyword::AS, Keyword::OF])
11648
- {
11649
- let expr = self.parse_expr()?;
11650
- Ok(Some(TableVersion::ForSystemTimeAsOf(expr)))
11651
- } else {
11652
- Ok(None)
11642
+ /// Parses a the timestamp version specifier (i.e. query historical data)
11643
+ pub fn maybe_parse_table_version(&mut self) -> Result<Option<TableVersion>, ParserError> {
11644
+ if self.dialect.supports_timestamp_versioning() {
11645
+ if self.parse_keywords(&[Keyword::FOR, Keyword::SYSTEM_TIME, Keyword::AS, Keyword::OF])
11646
+ {
11647
+ let expr = self.parse_expr()?;
11648
+ return Ok(Some(TableVersion::ForSystemTimeAsOf(expr)));
11649
+ } else if self.peek_keyword(Keyword::AT) || self.peek_keyword(Keyword::BEFORE) {
11650
+ let func_name = self.parse_object_name(true)?;
11651
+ let func = self.parse_function(func_name)?;
11652
+ return Ok(Some(TableVersion::Function(func)));
11653
+ }
11653
11654
}
11655
+ Ok(None)
11654
11656
}
11655
11657
11656
11658
/// Parses MySQL's JSON_TABLE column definition.
0 commit comments