-
Notifications
You must be signed in to change notification settings - Fork 268
SQL Formatter comparisons
The original Poor Man's T-SQL Formatter project page at http://architectshack.com/PoorMansTSqlFormatter.ashx had a comparison table featuring all the then-available T-SQL formatters I could find, and my best effort at measuring/comparing their capabilities and properties.
This approach had a number of issues:
- I was not able to compare all the engines effectively, because many were only available as apps / UI tools
- I ended up comparing different types of things (libraries, utilities, alls, sites)
- I let the comparison table even as it gradually fell out of date and became unfair/incorrect and (even more) incomplete
Despite these issues, I do believe that there is value in a project in a competitive space evaluating itself critically, and making the resulting information available publically - both as a tool to help improve (on the right things), and as a marketing device.
So I'm starting again here, in a publically editable wiki page this time so that corrections can be more easily provided by whoever has the information.
This time the comparison will be broken out by "product", to facilitate relevant comparisons from a user's perspective:
Product | SQL Dialects | Price | License | Source | Runtimes |
---|---|---|---|---|---|
Poor Man's T-SQL Formatter | T-SQL, others | Free | AGPL3 | C# | .Net, JS |
Sql Format (Laan) | T-SQL, ?? | Free | BSD | C# | .Net |
python-sqlparse | ?? | Free | BSD | Python | Python, ?? |
FSQLF | Basic SQL | Free | LGPL3 | C and LEX | C, Python, ?? |
pgFormatter | PostGre, others | Free | PostgreSQL Licence | Perl | Perl |
sql-parser (npm) | Basic SQL | Free | MIT | CoffeeScript | JS |
SqlFormatter (jdorn/PHP) | Standard SQL | Free | MIT | PHP | PHP |
vkbeautify | Basic SQL | Free | MIT | JS | JS |
sql-formatter (npm) | sql / n1ql / db2 | Free | MIT | JS | JS |
mssql vscode language service | T-SQL | N/A | ?? | ?? | ?? |
SqlDeveloper (oracle) | Oracle SQL, PL/SQL | N/A | OTN License | (closed) | C / CLI |
General SQL Parser | Many / All | $500+ | Comm. | (closed) | C, COM, .Net, Java |
SqlInForm | Many / All | N/A | N/A | (closed) | Java (, .Net? JNI?) |
SoftTree | Many / All | N/A | N/A | (closed) | ?? |
TidyCode | Many / All | N/A | N/A | (closed) | ?? |
DevArt | T-SQL | N/A | N/A | (closed) | ?? |
TSQLTidy | T-SQL | N/A | N/A | (closed) | ?? |
SSMSToolPack | T-SQL | N/A | N/A | (closed) | ?? |
ApexSQL | T-SQL | N/A | N/A | (closed) | ?? |
RedGate | T-SQL | N/A | N/A | (closed) | ?? |
SqlEnlight | T-SQL | N/A | N/A | (closed) | ?? |
SimpleTalk | Basic SQL?? | N/A | N/A | (closed) | ?? |
(please note: there are many others that I haven't tracked here because they don't seem to be used in any online formatter or editor plugin "products". I suspect that's because they're too simplistic to be useful in most scenarios, but I don't know that, haven't done the research. I started seeing a bunch of these, for example, when I searched "npm sql-parser" in google)
Product | Library | "Calls Home" / Online-only |
---|---|---|
http://poorsql.com | Poor Man | No - works offline |
DevArt SQL Formatter | DevArt | Yes |
Instant SQL Formatter | General SQL Parser | Yes |
Laan Sql Format | Sql Format (Laan) | Yes |
T-SQL Tidy | TSqlTidy | Yes |
Simple-Talk Code Prettifier | SimpleTalk | Yes |
Ubitsoft T-SQL Beautifier | SqlEnlight | Yes |
https://sqlformat.org/ | python-sqlparse | Yes |
pgFormatter | pgFormatter | Yes |
SQL Formatter (zeroturnaround) | sql-formatter (npm) | No |
Not yet looked at:
- https://codebeautify.org/sqlformatter - appears above poorsql.com in google results for "sql formatter", but doesn't appear to do any "real" formatting. Library unknown, using HTTP API service.
- https://www.freeformatter.com/sql-formatter.html#ad-output - same thing, high in search juice, low in quality :(
- http://dostring.com/sql-formattor.php - impressively succinct 30-line JS function
Ignored/discounted:
- SQLInForm not listed - 100-line limitation makes it "just a demo"
- Manoli.net site appears to have gone
- https://www.cleancss.com/sql-beautify/ not listed because it's not a SQL beautifier at all, at best acts as a minifier and colorizer: It's actually a JS beautifier
Verdict: It's understandable and fair that http://www.sql-format.com/ beats the pants off http://poorsql.com for online formatting search engine positioning. No-one cares whether it's open-source, and it does expose a lot more formatting options. These other generic transformation hub sites should be beatable, they are offering no value, clearly some SEO work is warranted here.
(related: traffic stats for http://poorsql.com/ show a sudden and dramatic slowing of traffic, 30% down in a few months, at the tail end of 2015. That is probably around when http://www.sql-format.com/ was introduced. http://poorsql.com/ has never recovered - possibly/probably due to project inactivity, traffic growth has stopped and it's currently stable around 1,500 visits/day)
Product | Library | SQL Dialects | "Calls Home" / Online-only |
---|---|---|---|
Poor Man's T-SQL Formatter - .Net | Poor Man's T-SQL Formatter | T-SQL, others | No - works offline |
poor-mans-t-sql-formatter-cli - NPM | Poor Man's T-SQL Formatter | T-SQL, others | No - works offline |
SQL Pretty Printer Desktop | General SQL Parser | Many / All | ?? |
SqlInform Pro | SqlInForm | Many / All | ?? |
Sql Enlight | SqlEnlight | T-SQL, Others?? | ?? |
SoftTree SQL Assistant | SoftTree | Many / All | ?? |
TidyCode T-SQL Formatter | TidyCode | Many / All | ?? |
SqlDeveloper (oracle) | SqlDeveloper | Oracle SQL, PL/SQL | No - works offline |
FSQLF | FSQLF | Basic SQL | No - works offline |
(Note: SQLInForm's and SoftTree's ability to run as a command-line formatting utility is assumed, not tested)
Note: This list is still very incomplete - I have not explicitly searched for command-line formatters yet, these are just the ones I previously knew about. All of the open-source libraries are likely to have had Cmdline Formatters created for them
Product | Library | "Calls Home" / Online-only | Syntax Coverage | Configurability |
---|---|---|---|---|
Poor Man's T-SQL Formatter | Same | No - works offline | High | Medium |
SQL Pretty Printer SSMS | General SQL Parser | ?? | High? | High? |
SSMS Tools Pack | Poor SQL or SSMSToolPack | ?? | High? | ?? |
ApexSQL Refactor | ApexSQL | ?? | ?? | High |
SQL Prompt | RedGate | ?? | ?? | High |
SqlInform Pro | SqlInForm | No? | ?? | High? |
DevArt SQLComplete | DevArt | No? | High? | High? |
SQL Enlight | SqlEnlight | ?? | High? | ?? |
SoftTree SQL Assistant | SoftTree | ?? | High? | High? |
(Laan SSMS tools not listed, they appear to exist in source code only, no release, and currently no SSMS 2016-2017 support)
(T-SQL Tidy not listed, appears not to have been updated for SSMS since 2008)
Product | Library | SQL Dialects | "Calls Home" / Online-only |
---|---|---|---|
Poor Man's T-SQL Formatter | Same | T-SQL, others | No - works offline |
SQL Pretty Printer VS | General SQL Parser | Many / All | ?? |
SqlInform Pro | SqlInForm | Many / All | No? |
SoftTree SQL Assistant | SoftTree | Many / All | ?? |
Product | Library | SQL Dialects | "Calls Home" / Online-only |
---|---|---|---|
Poor Man's T-SQL Formatter | Same | T-SQL, others | No - works offline |
Instant SQL Formatter for NPP | General SQL Parser | Many / All | Yes |
SqlInform Free | SqlInForm | Many / All | ?? |
SqlInform Pro | SqlInForm | Many / All | No? |
SoftTree SQL Assistant | SoftTree | Many / All | ?? |
Product | Library | SQL Dialects | "Calls Home" / Online-only |
---|---|---|---|
poor-mans-t-sql-formatter | Poor Man's | T-SQL, others | No - works offline |
atom-beautify | python-sqlparse (separate pip install) | ?? | No - works offline |
atom-pg-formatter | pgFormatter (needs perl runtime) | PostGre, others | No - works offline |
atom-format-sql | sql-parser (npm) | ?? | No - works offline |
atom-oracle-format | SqlDeveloper | Oracle SQL, PL/SQL | No - works offline |
Product | Library | SQL Dialects | "Calls Home" / Online-only |
---|---|---|---|
poor-mans-t-sql-formatter-vscode | Poor Man's T-SQL Formatter | T-SQL, others | No - works offline |
vscode-sql-beautify | vkbeautify | ?? | No - works offline |
sql-formatter | sql-formatter (npm) | sql / n1ql / db2 | No - works offline |
vscode-mssql | mssql vscode language service | T-SQL, others | No - works offline...? |
sqltools | sql-formatter (npm) | sql / n1ql / db2 | No - works offline |
To be thought about later:
- Poor Man's Demo
- Navicat? Does it even do formatting?
- http://www.razorsql.com/docs/sql_formatter.html
- Oracle SQL Developer
- SQL Enlight app
- SQlInForm app
- SoftTree
- Toad (no docs, just "try now"... :( )
- TidyCode Experimenter, and TidyCode Tool Installer for command-line-based integrations
- https://github.com/MikeShepard/SQLPSX/ - does it do formatting?
- FSQLF (gui??)
- Chrome extension (using python-sqlparse API)?? https://chrome.google.com/webstore/detail/sql-format/pdenfccaafflklfjiofedacmilbfpepb
To be evaluated:
- Multi-Statement support
- Nested Select support
- CTE support
- Multi-Batch support
- T-SQL
- PL/SQL
- Others?
- "Parse Tree" availability
- Graceful degradation (other dialects, new constructs, etc)
- DDL Support
- T-SQL
- Oracle / PL/SQL
- PostGre
- Others?
- Edge Case support - separately evaluating highlighting correctness, and safety/non-destructiveness in case of issues
- T-SQL
- Numerics & Currency
- Nested Comments
- Others?
- T-SQL
- General Formatting Styles
- tab-based indenting, initial clause argument on same line as clause keyword
- tab-based indenting, initial clause argument on subsequent line to clause keyword
- tab-based indenting, clauses after first one indented wrt statement start
- "Aligned" argument/parameter indenting
- HTML output support