Page History: Poor Man's T-SQL Formatter
Compare Page Revisions
Page Revision: 2011-04-26 03:30
This is a homebrew SQL (T-SQL) formatter, mainly created because I could not find any free and open-source T-SQL formatters that handle T-SQL exactly the way I want, including full stored procedure formatting.
It's written in C#, and designed to work in three phases, each using a pluggable class:
- Tokenization - text-level parsing, identifying operators vs keywords vs whitespace vs comments, etc
- Parsing - keyword-level parsing, identifying hierarchical relationships between components of the T-SQL code, statements, clauses, blocks, flow control, etc.
- Please note, this is not a fully-fledged SQL parser. It does not distinguish between different types of DML, it does not parse full expression trees, etc - there's a lot it doesn't do, it just does the bare minimum to enable the formatting I was aiming for.
- Formatting - turning the SQL parse tree back into T-SQL code, with customizable formatting preferences.
The library (and winforms demo and test projects) is released under the Affero GPL, and will continue to be subject to significant changes as I add the major features that I see are missing ( eg CASE statement parsing and derived table support). I'll update this again when it reaches a more stable state.
The code can be found on GitHub, I'd be very grateful for any feedback:
https://github.com/TaoK/PoorMansTSqlFormatterDemo
Paste some T-SQL here:
And it will be formatted here:
Please note (1): This demo uses some default default values for formatting options supported by the library. For a more complete customizable demo, please download the windows forms app (sorry, I haven't compiled and made that available here yet - coming soon; in the meantime, you can download the source from
github).
Please note (2): This demo does send the SQL that you input to the webserver, because the library is implemented as C# and I didn't feel like messing around with silverlight. I am not doing any logging of request content, however, and as far as I know my hosting provider isn't either - so your SQL code should be as reasonably private as anything you post in an online (non-SSL) form. You can see the formatting web service code on
github, and you can see the submission code in the source of this page, it's just some simple jQuery code.
Please note (3): this library is released under the GNU Affero GPL v3, so third parties can feel free to host it as well, if they make available the source of the version that they are hosting (see the detailed terms of the AGPL, eg on
wikipedia).