2017 © Pedro Peláez
 

library sql-formatter

a PHP SQL highlighting library

image

jdorn/sql-formatter

a PHP SQL highlighting library

  • Sunday, August 30, 2015
  • by jdorn
  • Repository
  • 35 Watchers
  • 1596 Stars
  • 30,799,273 Installations
  • HTML
  • 78 Dependents
  • 12 Suggesters
  • 130 Forks
  • 37 Open issues
  • 8 Versions
  • 7 % Grown

The README.md

SqlFormatter

A lightweight php class for formatting sql statements., (*1)

It can automatically indent and add line breaks in addition to syntax highlighting., (*2)

History

I found myself having to debug auto-generated SQL statements all the time and wanted some way to easily output formatted HTML without having to include a huge library or copy and paste into online formatters., (*3)

I was originally planning to extract the formatting code from PhpMyAdmin, but that was 10,000+ lines of code and used global variables., (*4)

I saw that other people had the same problem and used Stack Overflow user losif's answer as a starting point. http://stackoverflow.com/a/3924147, (*5)

Usage

The SqlFormatter class has a static method 'format' which takes a SQL string
as input and returns a formatted HTML block inside a pre tag., (*6)

Sample usage:, (*7)

<?php
require_once('SqlFormatter.php');

$query = "SELECT count(*),`Column1`,`Testing`, `Testing Three` FROM `Table1`
    WHERE Column1 = 'testing' AND ( (`Column2` = `Column3` OR Column4 >= NOW()) )
    GROUP BY Column1 ORDER BY Column3 DESC LIMIT 5,10";

echo SqlFormatter::format($query);

Output:, (*8)

, (*9)

Formatting Only

If you don't want syntax highlighting and only want the indentations and line breaks, pass in false as the second parameter., (*10)

This is useful for outputting to error logs or other non-html formats., (*11)

<?php
echo SqlFormatter::format($query, false);

Output:, (*12)

, (*13)

Syntax Highlighting Only

There is a separate method 'highlight' that preserves all original whitespace and just adds syntax highlighting., (*14)

This is useful for sql that is already well formatted and just needs to be a little easier to read., (*15)

<?php
echo SqlFormatter::highlight($query);

Output:, (*16)

, (*17)

Compress Query

The compress method removes all comments and compresses whitespace., (*18)

This is useful for outputting queries that can be copy pasted to the command line easily., (*19)

-- This is a comment
    SELECT
    /* This is another comment
    On more than one line */
    Id #This is one final comment
    as temp, DateCreated as Created FROM MyTable;
echo SqlFormatter::compress($query)

Output:, (*20)

SELECT Id as temp, DateCreated as Created FROM MyTable;

Remove Comments

If you want to keep all original whitespace formatting and just remove comments, you can use the removeComments method instead of compress., (*21)

-- This is a comment
    SELECT
    /* This is another comment
    On more than one line */
    Id #This is one final comment
    as temp, DateCreated as Created FROM MyTable;
<?php
echo SqlFormatter::removeComments($query);

Output:, (*22)


SELECT Id as temp, DateCreated as Created FROM MyTable;

Split SQL String into Queries

Another feature, which is unrelated to formatting, is the ability to break up a SQL string into multiple queries., (*23)

For Example:, (*24)

DROP TABLE IF EXISTS MyTable;
CREATE TABLE MyTable ( id int );
INSERT INTO MyTable (id)
    VALUES
    (1),(2),(3),(4);
SELECT * FROM MyTable;
<?php
$queries = SqlFormatter::splitQuery($sql);

Result:, (*25)

  1. DROP TABLE IF EXISTS MyTable;
  2. CREATE TABLE MyTable ( id int );
  3. INSERT INTO MyTable (id) VALUES (1),(2),(3),(4);
  4. SELECT * FROM MyTable;

Why Not Regular Expressions?

Why not just use explode(';', $sql) or a regular expression?, (*26)

The following example sql and others like it are impossible to split correctly using regular expressions, no matter how complex., (*27)

SELECT ";"; SELECT ";\"; a;";
SELECT ";
    abc";
SELECT a,b #comment;
FROM test;

SqlFormatter breaks the string into tokens instead of using regular expressions and will correctly produce:, (*28)

  1. SELECT ";";
  2. SELECT ";\"; a;";
  3. SELECT "; abc";
  4. SELECT a,b #comment; FROM test;

Please note, the splitQuery method will still fail in the following cases: * The DELIMITER command can be used to change the delimiter from the default ';' to something else.
* The CREATE PROCEDURE command has a ';' in the middle of it * The USE command is not terminated with a ';', (*29)

The Versions

30/08 2015

dev-master

9999999-dev https://github.com/jdorn/sql-formatter/

a PHP SQL highlighting library

  Sources   Download

MIT

The Requires

  • php >=5.2.4

 

The Development Requires

sql highlight

12/05 2015

dev-javascript-port

dev-javascript-port https://github.com/jdorn/sql-formatter/

a PHP SQL highlighting library

  Sources   Download

MIT

The Requires

  • php >=5.2.4

 

The Development Requires

sql highlight

12/01 2014

v1.2.17

1.2.17.0 https://github.com/jdorn/sql-formatter/

a PHP SQL highlighting library

  Sources   Download

MIT

The Requires

  • php >=5.2.4

 

The Development Requires

sql highlight

27/11 2013

v1.2.16

1.2.16.0 https://github.com/jdorn/sql-formatter/

a PHP SQL highlighting library

  Sources   Download

MIT

The Requires

  • php >=5.2.4

 

The Development Requires

sql highlight

26/04 2013

v1.2.9

1.2.9.0 https://github.com/jdorn/sql-formatter/

a PHP SQL highlighting library

  Sources   Download

MIT

The Requires

  • php >=5.2.4

 

The Development Requires

sql highlight

22/12 2012

v1.2.0

1.2.0.0 https://github.com/jdorn/sql-formatter/

a PHP SQL highlighting library

  Sources   Download

LGPL

The Requires

  • php >=5.2.4

 

sql highlight

11/11 2012

v1.1.0

1.1.0.0 https://github.com/jdorn/sql-formatter/

a PHP SQL highlighting library

  Sources   Download

LGPL

The Requires

  • php >=5.2.4

 

sql highlight

05/10 2012

v1.0.1

1.0.1.0 https://github.com/jdorn/sql-formatter/

a PHP SQL highlighting library

  Sources   Download

LGPL

The Requires

  • php >=5.2.4

 

sql highlight