@@ -11208,7 +11208,7 @@ impl<'a> Parser<'a> {
1120811208 };
1120911209
1121011210 // Parse potential version qualifier
11211- let version = self.parse_table_version ()?;
11211+ let version = self.maybe_parse_table_version ()?;
1121211212
1121311213 // Postgres, MSSQL, ClickHouse: table-valued functions:
1121411214 let args = if self.consume_token(&Token::LParen) {
@@ -11639,18 +11639,20 @@ impl<'a> Parser<'a> {
1163911639 }
1164011640 }
1164111641
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+ }
1165311654 }
11655+ Ok(None)
1165411656 }
1165511657
1165611658 /// Parses MySQL's JSON_TABLE column definition.
0 commit comments