tconbeer / sqlfmt

sqlfmt formats your dbt SQL files so you don't have to
https://sqlfmt.com
Apache License 2.0
373 stars 15 forks source link

Support Bracketed Literals (SQL Server) #514

Open jlkravitz opened 9 months ago

jlkravitz commented 9 months ago

Describe the bug When referencing a linked server in openquery in SQL Server, sqlfmt incorrectly formats linked server names that are in brackets (with uncommon characters). In my case, the name of the linked server is the server's IP address (xxx.xx.xxx.xx). It adds unnecessary spaces. The resulting SQL has a syntax error and does not run.

To Reproduce

select * from openquery([123.23.54], 'select * from my_table')

Expected behavior

select * from openquery([123.23.54], 'select * from my_table')

Actual behavior

select * from openquery([123.23 .54], 'select * from my_table')

Additional context What is the output of sqlfmt --version?

sqlfmt, version 0.19.2
tconbeer commented 9 months ago

Thanks for the report.

SQL Server uses brackets in a unique way (compared to all other databases/warehouses). To support this we would need to create a new SQL Server-specific dialect that treats brackets like quotes. I'm unlikely to get that done any time soon, but PRs are welcome!

jlkravitz commented 9 months ago

Got it. Your comment has made me explore, and I found out I can wrap the name in double-quotes instead of brackets. sqlfmt then works like a charm!