vertical-blank / sql-formatter

SQL formatter written with only Java Standard Library, without dependencies.
MIT License
223 stars 46 forks source link

Extra whitespace inserted in string concatenation operator #55

Open rhinotake opened 2 years ago

rhinotake commented 2 years ago

In Dialect.PostgreSql, when using the string concatenation operator (||), extra whitespace is inserted.

    val res = SqlFormatter
      .of(Dialect.PostgreSql)
      .format("select aa || bb from zzz")

    println(res)
    // select
    //   aa | | bb
    //       ^
    // from
    //   zzz

If you run dialectConfig.plusOperators("||"), no extra whitespace will be inserted.

    val res = SqlFormatter
      .of(Dialect.PostgreSql)
      .extend { dialectConfig -> dialectConfig.plusOperators("||") }
      .format("select aa || bb from zzz")

    println(res)
    // select
    //   aa || bb
    // from
    //   zzz

Similar whitespace will be inserted in Dialect.N1ql and Dialect.TSql.

I can't judge whether the response is appropriate, but after applying the following patch, plusOperators("||") is no longer needed.

diff --git a/src/main/java/com/github/vertical_blank/sqlformatter/languages/PostgreSqlFormatter.java b/src/main/java/com/github/vertical_blank/sqlformatter/languages/PostgreSqlFormatter.java
index e8c4f0a..15e76ae 100644
--- a/src/main/java/com/github/vertical_blank/sqlformatter/languages/PostgreSqlFormatter.java
+++ b/src/main/java/com/github/vertical_blank/sqlformatter/languages/PostgreSqlFormatter.java
@@ -531,7 +531,7 @@ public class PostgreSqlFormatter extends AbstractFormatter {
         .operators(
             Arrays.asList(
                 "!=", "<<", ">>", "||/", "|/", "::", "->>", "->", "~~*", "~~", "!~~*", "!~~", "~*",
-                "!~*", "!~", "!!", "@@", "@@@"))
+                "!~*", "!~", "!!", "@@", "@@@", "||"))
         .build();
   }
vertical-blank commented 2 years ago

@rhinotake As you said, || should be treated as a string concatenation operator on PostgreSQL and CouchBase N1QL. But, T-SQL seems to use + as a string concatenation operator. https://docs.microsoft.com/ja-jp/sql/t-sql/language-elements/string-concatenation-transact-sql?view=sql-server-ver15

I'm going to fix this. Thank you for reporting.