File tree Expand file tree Collapse file tree 2 files changed +23
-4
lines changed
Expand file tree Collapse file tree 2 files changed +23
-4
lines changed Original file line number Diff line number Diff line change @@ -387,7 +387,8 @@ impl<'a> Formatter<'a> {
387387 ] ;
388388
389389 const ADD_WHITESPACE_BETWEEN : & [ TokenKind ] = & [ TokenKind :: CloseParen , TokenKind :: Reserved ] ;
390-
390+ const BEFORE_ARRAY : & [ TokenKind ] =
391+ & [ TokenKind :: CloseParen , TokenKind :: Word , TokenKind :: Reserved ] ;
391392 let inlined = self . inline_block . begin_if_possible ( self . tokens , self . index ) ;
392393 let previous_non_whitespace_token = self . previous_non_whitespace_token ( 1 ) ;
393394 let fold_in_top_level = !inlined
@@ -406,13 +407,16 @@ impl<'a> Formatter<'a> {
406407 // Take out the preceding space unless there was whitespace there in the original query
407408 // or another opening parens or line comment
408409 let previous_token = self . previous_token ( 1 ) ;
409- if previous_token. is_none ( )
410- || !PRESERVE_WHITESPACE_FOR . contains ( & previous_token. unwrap ( ) . kind )
410+ if previous_token. is_none_or ( |t| !PRESERVE_WHITESPACE_FOR . contains ( & t. kind ) )
411+ || previous_non_whitespace_token
412+ . is_some_and ( |t| token. value == "[" && BEFORE_ARRAY . contains ( & t. kind ) )
411413 {
412414 self . trim_spaces_end ( query) ;
413415 }
414416
415- if previous_non_whitespace_token. is_some_and ( |t| ADD_WHITESPACE_BETWEEN . contains ( & t. kind ) ) {
417+ if previous_non_whitespace_token
418+ . is_some_and ( |t| token. value != "[" && ADD_WHITESPACE_BETWEEN . contains ( & t. kind ) )
419+ {
416420 self . trim_spaces_end ( query) ;
417421 query. push ( ' ' ) ;
418422 }
Original file line number Diff line number Diff line change @@ -575,6 +575,21 @@ mod tests {
575575 assert_eq ! ( format( input, & QueryParams :: None , & options) , expected) ;
576576 }
577577
578+ #[ test]
579+ fn it_formats_array_index_notation ( ) {
580+ let input = "SELECT a [ 1 ] + b [ 2 ] [ 5+1 ] > c [3] ;" ;
581+ let options = FormatOptions {
582+ dialect : Dialect :: PostgreSql ,
583+ ..Default :: default ( )
584+ } ;
585+ let expected = indoc ! (
586+ "
587+ SELECT
588+ a[1] + b[2][5 + 1] > c[3];"
589+ ) ;
590+
591+ assert_eq ! ( format( input, & QueryParams :: None , & options) , expected) ;
592+ }
578593 #[ test]
579594 fn it_formats_limit_of_single_value_and_offset ( ) {
580595 let input = "LIMIT 5 OFFSET 8;" ;
You can’t perform that action at this time.
0 commit comments