diffplug / spotless

Keep your code spotless
Apache License 2.0
4.46k stars 450 forks source link

BUG: Spotless SQL DBeaver formatter produces INVALID spark sql syntax with whitespaces added inside backticks and other places #2250

Open esobolievv opened 2 weeks ago

esobolievv commented 2 weeks ago

If you are submitting a bug, please include the following:

Hi Team,

We have a big side-effect of using DBeaver SQL formatter within spotless "as is".

When I run this formatter on valid Spark SQL code where column name is wrapped with backtick symbol, it puts whitespaces around column name making .sql valid INVALID for spark to run within spark.sql("sql-query-from-file")

It's easy to reproduce. Just create a simple SQL file within columns given below with backticks (see: Expected example) and you'll see it's formatter to "Current behavior" that is not valid syntax.

Versions:

Gradle v8+. No matter what version, it doesn't work!
Spotless v.6.25.0. No matter what version, it doesn't work!
spotless {
        sql {
            dbeaver().configFile(rootProject.file(".dbeaver.properties"))

            target("<my-folder-with-sqls>/**/*.sql")
       }
}

.dbeaver.properties

sql.formatter.keyword.case=UPPER
sql.formatter.statement.delimiter=;
sql.formatter.indent.type=space
sql.formatter.indent.size=2

Current behavior (formatter gives not valid spark sql):

     ` MyCol.1 ` AS MY_COLUMN_1, -- whitespace inside backticks
     ` MyCol.2 ` AS MY_COLUMN_2 -- whitespace inside backticks

Expected (valid spark sql):

     `MyCol.1` AS MY_COLUMN_1, -- no whitespace inside backticks
     `MyCol.2` AS MY_COLUMN_2 -- no whitespace inside backticks

UPD: Other problems with whitespace were discovered that makes it IMPOSSIBLE to use Spotless anymore :(

It seem like so popular Spark SQL syntax isn't supported here. Would appreciate it addressing asap or propose a possible workaround

If you're just submitting a feature request or question, no need for the above.

esobolievv commented 4 days ago

HI @nedtwigg thank you for marking as the BUG. I added "UPD" section and described that it's impossible for me to use Spotless SQL formatter anymore within Spark SQL syntax as I can't control how formatter puts a whitespace. It breaks SQL easily that is hard to track. Are there any possible workarounds?