@@ -11181,7 +11181,7 @@ impl<'a> Parser<'a> {
1118111181 };
1118211182
1118311183 // Parse potential version qualifier
11184- let version = self.parse_table_version ()?;
11184+ let version = self.maybe_parse_table_version ()?;
1118511185
1118611186 // Postgres, MSSQL, ClickHouse: table-valued functions:
1118711187 let args = if self.consume_token(&Token::LParen) {
@@ -11612,18 +11612,20 @@ impl<'a> Parser<'a> {
1161211612 }
1161311613 }
1161411614
11615- /// Parse a given table version specifier.
11616- ///
11617- /// For now it only supports timestamp versioning for BigQuery and MSSQL dialects.
11618- pub fn parse_table_version(&mut self) -> Result<Option<TableVersion>, ParserError> {
11619- if dialect_of!(self is BigQueryDialect | MsSqlDialect)
11620- && self.parse_keywords(&[Keyword::FOR, Keyword::SYSTEM_TIME, Keyword::AS, Keyword::OF])
11621- {
11622- let expr = self.parse_expr()?;
11623- Ok(Some(TableVersion::ForSystemTimeAsOf(expr)))
11624- } else {
11625- Ok(None)
11615+ /// Parses a the timestamp version specifier (i.e. query historical data)
11616+ pub fn maybe_parse_table_version(&mut self) -> Result<Option<TableVersion>, ParserError> {
11617+ if self.dialect.supports_timestamp_versioning() {
11618+ if self.parse_keywords(&[Keyword::FOR, Keyword::SYSTEM_TIME, Keyword::AS, Keyword::OF])
11619+ {
11620+ let expr = self.parse_expr()?;
11621+ return Ok(Some(TableVersion::ForSystemTimeAsOf(expr)));
11622+ } else if self.peek_keyword(Keyword::AT) || self.peek_keyword(Keyword::BEFORE) {
11623+ let func_name = self.parse_object_name(true)?;
11624+ let func = self.parse_function(func_name)?;
11625+ return Ok(Some(TableVersion::Function(func)));
11626+ }
1162611627 }
11628+ Ok(None)
1162711629 }
1162811630
1162911631 /// Parses MySQL's JSON_TABLE column definition.
0 commit comments