@@ -11218,7 +11218,7 @@ impl<'a> Parser<'a> {
1121811218 };
1121911219
1122011220 // Parse potential version qualifier
11221- let version = self.parse_table_version ()?;
11221+ let version = self.maybe_parse_table_version ()?;
1122211222
1122311223 // Postgres, MSSQL, ClickHouse: table-valued functions:
1122411224 let args = if self.consume_token(&Token::LParen) {
@@ -11649,18 +11649,20 @@ impl<'a> Parser<'a> {
1164911649 }
1165011650 }
1165111651
11652- /// Parse a given table version specifier.
11653- ///
11654- /// For now it only supports timestamp versioning for BigQuery and MSSQL dialects.
11655- pub fn parse_table_version(&mut self) -> Result<Option<TableVersion>, ParserError> {
11656- if dialect_of!(self is BigQueryDialect | MsSqlDialect)
11657- && self.parse_keywords(&[Keyword::FOR, Keyword::SYSTEM_TIME, Keyword::AS, Keyword::OF])
11658- {
11659- let expr = self.parse_expr()?;
11660- Ok(Some(TableVersion::ForSystemTimeAsOf(expr)))
11661- } else {
11662- Ok(None)
11652+ /// Parses a the timestamp version specifier (i.e. query historical data)
11653+ pub fn maybe_parse_table_version(&mut self) -> Result<Option<TableVersion>, ParserError> {
11654+ if self.dialect.supports_timestamp_versioning() {
11655+ if self.parse_keywords(&[Keyword::FOR, Keyword::SYSTEM_TIME, Keyword::AS, Keyword::OF])
11656+ {
11657+ let expr = self.parse_expr()?;
11658+ return Ok(Some(TableVersion::ForSystemTimeAsOf(expr)));
11659+ } else if self.peek_keyword(Keyword::AT) || self.peek_keyword(Keyword::BEFORE) {
11660+ let func_name = self.parse_object_name(true)?;
11661+ let func = self.parse_function(func_name)?;
11662+ return Ok(Some(TableVersion::Function(func)));
11663+ }
1166311664 }
11665+ Ok(None)
1166411666 }
1166511667
1166611668 /// Parses MySQL's JSON_TABLE column definition.
0 commit comments