@@ -1849,17 +1849,9 @@ impl<'a> Parser<'a> {
1849
1849
/// Parses an array expression `[ex1, ex2, ..]`
1850
1850
/// if `named` is `true`, came from an expression like `ARRAY[ex1, ex2]`
1851
1851
pub fn parse_array_expr ( & mut self , named : bool ) -> Result < Expr , ParserError > {
1852
- if self . peek_token ( ) . token == Token :: RBracket {
1853
- let _ = self . next_token ( ) ; // consume ]
1854
- Ok ( Expr :: Array ( Array {
1855
- elem : vec ! [ ] ,
1856
- named,
1857
- } ) )
1858
- } else {
1859
- let exprs = self . parse_comma_separated ( Parser :: parse_expr) ?;
1860
- self . expect_token ( & Token :: RBracket ) ?;
1861
- Ok ( Expr :: Array ( Array { elem : exprs, named } ) )
1862
- }
1852
+ let exprs = self . parse_comma_separated0 ( Parser :: parse_expr, false , Token :: RBracket ) ?;
1853
+ self . expect_token ( & Token :: RBracket ) ?;
1854
+ Ok ( Expr :: Array ( Array { elem : exprs, named } ) )
1863
1855
}
1864
1856
1865
1857
pub fn parse_listagg_on_overflow ( & mut self ) -> Result < Option < ListAggOnOverflow > , ParserError > {
@@ -2352,14 +2344,10 @@ impl<'a> Parser<'a> {
2352
2344
/// [map]: https://duckdb.org/docs/sql/data_types/map.html#creating-maps
2353
2345
fn parse_duckdb_map_literal ( & mut self ) -> Result < Expr , ParserError > {
2354
2346
self . expect_token ( & Token :: LBrace ) ?;
2355
- if self . peek_token ( ) . token == Token :: RBrace {
2356
- let _ = self . next_token ( ) ; // consume }
2357
- Ok ( Expr :: Map ( Map { entries : vec ! [ ] } ) )
2358
- } else {
2359
- let fields = self . parse_comma_separated ( Self :: parse_duckdb_map_field) ?;
2360
- self . expect_token ( & Token :: RBrace ) ?;
2361
- Ok ( Expr :: Map ( Map { entries : fields } ) )
2362
- }
2347
+ let fields =
2348
+ self . parse_comma_separated0 ( Self :: parse_duckdb_map_field, false , Token :: RBrace ) ?;
2349
+ self . expect_token ( & Token :: RBrace ) ?;
2350
+ Ok ( Expr :: Map ( Map { entries : fields } ) )
2363
2351
}
2364
2352
2365
2353
/// Parse a field for a duckdb [map]
@@ -2939,7 +2927,11 @@ impl<'a> Parser<'a> {
2939
2927
Expr :: InList {
2940
2928
expr : Box :: new ( expr) ,
2941
2929
list : if self . dialect . supports_in_empty_list ( ) {
2942
- self . parse_comma_separated0 ( Parser :: parse_expr, self . options . trailing_commas , Token :: RParen ) ?
2930
+ self . parse_comma_separated0 (
2931
+ Parser :: parse_expr,
2932
+ self . options . trailing_commas ,
2933
+ Token :: RParen ,
2934
+ ) ?
2943
2935
} else {
2944
2936
self . parse_comma_separated ( Parser :: parse_expr) ?
2945
2937
} ,
@@ -3483,17 +3475,20 @@ impl<'a> Parser<'a> {
3483
3475
/// Parse a comma-separated list of 0+ items accepted by `F`
3484
3476
/// - [trailing_commas]: support trailing_commas or not
3485
3477
/// - [end_token]: expected end token for the closure (e.g. [Token::RParen], [Token::RBrace] ...)
3486
- pub fn parse_comma_separated0 < T , F > ( & mut self , f : F , trailing_commas : bool , end_token : Token ) -> Result < Vec < T > , ParserError >
3478
+ pub fn parse_comma_separated0 < T , F > (
3479
+ & mut self ,
3480
+ f : F ,
3481
+ trailing_commas : bool ,
3482
+ end_token : Token ,
3483
+ ) -> Result < Vec < T > , ParserError >
3487
3484
where
3488
3485
F : FnMut ( & mut Parser < ' a > ) -> Result < T , ParserError > ,
3489
3486
{
3490
3487
if self . peek_token ( ) . token == end_token {
3491
3488
return Ok ( vec ! [ ] ) ;
3492
3489
}
3493
3490
3494
- if trailing_commas
3495
- && self . peek_tokens ( ) == [ Token :: Comma , end_token]
3496
- {
3491
+ if trailing_commas && self . peek_tokens ( ) == [ Token :: Comma , end_token] {
3497
3492
let _ = self . consume_token ( & Token :: Comma ) ;
3498
3493
return Ok ( vec ! [ ] ) ;
3499
3494
}
@@ -4062,7 +4057,11 @@ impl<'a> Parser<'a> {
4062
4057
} )
4063
4058
} ;
4064
4059
self . expect_token ( & Token :: LParen ) ?;
4065
- let args = self . parse_comma_separated0 ( parse_function_param, self . options . trailing_commas , Token :: RParen ) ?;
4060
+ let args = self . parse_comma_separated0 (
4061
+ parse_function_param,
4062
+ self . options . trailing_commas ,
4063
+ Token :: RParen ,
4064
+ ) ?;
4066
4065
self . expect_token ( & Token :: RParen ) ?;
4067
4066
4068
4067
let return_type = if self . parse_keyword ( Keyword :: RETURNS ) {
@@ -10716,7 +10715,11 @@ impl<'a> Parser<'a> {
10716
10715
}
10717
10716
10718
10717
if self . consume_token ( & Token :: LParen ) {
10719
- let interpolations = self . parse_comma_separated0 ( |p| p. parse_interpolation ( ) , self . options . trailing_commas , Token :: RParen ) ?;
10718
+ let interpolations = self . parse_comma_separated0 (
10719
+ |p| p. parse_interpolation ( ) ,
10720
+ self . options . trailing_commas ,
10721
+ Token :: RParen ,
10722
+ ) ?;
10720
10723
self . expect_token ( & Token :: RParen ) ?;
10721
10724
// INTERPOLATE () and INTERPOLATE ( ... ) variants
10722
10725
return Ok ( Some ( Interpolate {
0 commit comments