@@ -2370,25 +2370,21 @@ impl<'a> Parser<'a> {
23702370
23712371 /// Syntax
23722372 /// ```sql
2373- /// -- typed, specific to bigquery
2373+ /// -- typed
23742374 /// STRUCT<[field_name] field_type, ...>( expr1 [, ... ])
23752375 /// -- typeless
23762376 /// STRUCT( expr1 [AS field_name] [, ... ])
23772377 /// ```
23782378 fn parse_struct_literal(&mut self) -> Result<Expr, ParserError> {
2379- let mut fields = vec![];
2380- // Typed struct syntax is only supported by BigQuery
2381- // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#typed_struct_syntax
2382- if self.dialect.supports_typed_struct_syntax() {
2383- self.prev_token();
2384- let trailing_bracket;
2385- (fields, trailing_bracket) =
2386- self.parse_struct_type_def(Self::parse_struct_field_def)?;
2387- if trailing_bracket.0 {
2388- return parser_err!("unmatched > in STRUCT literal", self.peek_token().location);
2389- }
2379+ // Parse the fields definition if exist `<[field_name] field_type, ...>`
2380+ self.prev_token();
2381+ let (fields, trailing_bracket) =
2382+ self.parse_struct_type_def(Self::parse_struct_field_def)?;
2383+ if trailing_bracket.0 {
2384+ return parser_err!("unmatched > in STRUCT literal", self.peek_token().location);
23902385 }
23912386
2387+ // Parse the struct values `(expr1 [, ... ])`
23922388 self.expect_token(&Token::LParen)?;
23932389 let values = self
23942390 .parse_comma_separated(|parser| parser.parse_struct_field_expr(!fields.is_empty()))?;
0 commit comments