Project

sqlpp

0.01
No commit activity in last 3 years
No release in over 3 years
A simplistic SQL parser and pretty-printer
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

>= 0
 Project Readme

SQLPP

SQLPP is a simplistic SQL parser and pretty-printer.

Usage

require 'sqlpp'

sql = "..."
ast = SQLPP::Parser.parse(sql)

puts SQLPP::Formatter.new.format(ast)

# or, to wrap projection lists...
puts SQLPP::Formatter.new(projections: :wrap).format(ast)

Or, you can use the included bin/sqlpp script to format SQL via STDIN:

$ sqlpp -h
SQLPP (SQL Pretty Printer)

Usage: sqlpp -h -? -wp < SQL

 -h or -?: this list of options
 -wp: wrap the projection lists

$ sqlpp -wp < query.sql
...

Output

The formatter is not particularly sophisticated, and is optimized primarily for displaying queries with deeply nested subselects. The major query components (FROM, WHERE, GROUP BY, and ORDER BY) are printed on separate lines, with subselects indented.

SELECT a, b, sum(c)
FROM (
  SELECT d, e, f
  FROM (
    SELECT g, h, i
    FROM table
    WHERE id IN (1, 2, 3)
  ) a
  WHERE a.e = 5
  OR a.e = 7
) b
WHERE b.c > 5
GROUP BY a, b
ORDER BY a ASC, b DESC

Caveats

This implementation is far, far, far from complete. It currently accepts only SELECT statements, and even then will only recognize a subset of the valid SQL syntax. That said, it should be a pretty big subset. It's done well enough for what I've needed it for.

If, however, you find that it doesn't recognize some syntax that you need, pull requests would be appreciated!

License

MIT. See MIT-LICENSE.

Author

Jamis Buck (jamis@jamisbuck.org)