@@ -2384,28 +2384,24 @@ impl<'a> Parser<'a> {
23842384
23852385 /// Syntax
23862386 /// ```sql
2387- /// -- typed, specific to bigquery
2387+ /// -- typed
23882388 /// STRUCT<[field_name] field_type, ...>( expr1 [, ... ])
23892389 /// -- typeless
23902390 /// STRUCT( expr1 [AS field_name] [, ... ])
23912391 /// ```
23922392 fn parse_struct_literal(&mut self) -> Result<Expr, ParserError> {
2393- let mut fields = vec![];
2394- // Typed struct syntax is only supported by BigQuery
2395- // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#typed_struct_syntax
2396- if self.dialect.supports_typed_struct_syntax() {
2397- self.prev_token();
2398- let trailing_bracket;
2399- (fields, trailing_bracket) =
2400- self.parse_struct_type_def(Self::parse_struct_field_def)?;
2401- if trailing_bracket.0 {
2402- return parser_err!(
2393+ // Parse the fields definition if exist `<[field_name] field_type, ...>`
2394+ self.prev_token();
2395+ let (fields, trailing_bracket) =
2396+ self.parse_struct_type_def(Self::parse_struct_field_def)?;
2397+ if trailing_bracket.0 {
2398+ return parser_err!(
24032399 "unmatched > in STRUCT literal",
24042400 self.peek_token().span.start
24052401 );
2406- }
24072402 }
24082403
2404+ // Parse the struct values `(expr1 [, ... ])`
24092405 self.expect_token(&Token::LParen)?;
24102406 let values = self
24112407 .parse_comma_separated(|parser| parser.parse_struct_field_expr(!fields.is_empty()))?;
0 commit comments