Removed the old formatting library.
Signed-off-by: Dan Ungureanu <udan1107@gmail.com>
This commit is contained in:
parent
ade277dae5
commit
364cf435ed
@ -1,21 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013 Jeremy Dorn <jeremy@jeremydorn.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@ -1,185 +0,0 @@
|
||||
SqlFormatter
|
||||
=============
|
||||
|
||||
A lightweight php class for formatting sql statements.
|
||||
|
||||
It can automatically indent and add line breaks in addition to syntax highlighting.
|
||||
|
||||
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.
|
||||
|
||||
I was originally planning to extract the formatting code from PhpMyAdmin,
|
||||
but that was 10,000+ lines of code and used global variables.
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
Sample usage:
|
||||
|
||||
```php
|
||||
<?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:
|
||||
|
||||

|
||||
|
||||
Formatting Only
|
||||
-------------------------
|
||||
If you don't want syntax highlighting and only want the indentations and
|
||||
line breaks, pass in false as the second parameter.
|
||||
|
||||
This is useful for outputting to error logs or other non-html formats.
|
||||
|
||||
```php
|
||||
<?php
|
||||
echo SqlFormatter::format($query, false);
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||

|
||||
|
||||
Syntax Highlighting Only
|
||||
-------------------------
|
||||
|
||||
There is a separate method 'highlight' that preserves all original whitespace
|
||||
and just adds syntax highlighting.
|
||||
|
||||
This is useful for sql that is already well formatted and just needs to be a little
|
||||
easier to read.
|
||||
|
||||
```php
|
||||
<?php
|
||||
echo SqlFormatter::highlight($query);
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||

|
||||
|
||||
Compress Query
|
||||
--------------------------
|
||||
|
||||
The compress method removes all comments and compresses whitespace.
|
||||
|
||||
This is useful for outputting queries that can be copy pasted to the command line easily.
|
||||
|
||||
```
|
||||
-- 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::compress($query)
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
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.
|
||||
|
||||
```
|
||||
-- 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
|
||||
<?php
|
||||
echo SqlFormatter::removeComments($query);
|
||||
```
|
||||
|
||||
Output:
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
For Example:
|
||||
|
||||
```sql
|
||||
DROP TABLE IF EXISTS MyTable;
|
||||
CREATE TABLE MyTable ( id int );
|
||||
INSERT INTO MyTable (id)
|
||||
VALUES
|
||||
(1),(2),(3),(4);
|
||||
SELECT * FROM MyTable;
|
||||
```
|
||||
|
||||
```php
|
||||
<?php
|
||||
$queries = SqlFormatter::splitQuery($sql);
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
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?
|
||||
|
||||
The following example sql and others like it are _impossible_ to split correctly using regular expressions, no matter how complex.
|
||||
|
||||
```
|
||||
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:
|
||||
|
||||
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 ';'
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,130 +0,0 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* tests for sql-formatter/lib/SqlFormatter.php
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/sql-formatter/lib/SqlFormatter.php';
|
||||
|
||||
/**
|
||||
* tests for SqlFormatter
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class SqlFormatter_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Data provider for testSqlFormatter_format
|
||||
*
|
||||
* @return array with test data
|
||||
*/
|
||||
public function formatDataProvider() {
|
||||
return array(
|
||||
array(
|
||||
"SELECT * FROM `test`",
|
||||
"SELECT
|
||||
*
|
||||
FROM
|
||||
`test`",
|
||||
),
|
||||
|
||||
array(
|
||||
"SELECT customer_id, customer_name, COUNT(order_id) as total FROM customers
|
||||
INNER JOIN orders ON customers.customer_id = orders.customer_id GROUP BY customer_id,
|
||||
customer_name HAVING COUNT(order_id) > 5 ORDER BY COUNT(order_id) DESC;",
|
||||
"SELECT
|
||||
customer_id,
|
||||
customer_name,
|
||||
COUNT(order_id) as total
|
||||
FROM
|
||||
customers
|
||||
INNER JOIN orders ON customers.customer_id = orders.customer_id
|
||||
GROUP BY
|
||||
customer_id,
|
||||
customer_name
|
||||
HAVING
|
||||
COUNT(order_id) > 5
|
||||
ORDER BY
|
||||
COUNT(order_id) DESC;"
|
||||
),
|
||||
|
||||
array(
|
||||
"SELECT a,b as c FROM `ab`; UPDATE `cd` SET `col` = REPLACE(col, 'find', 'replace')
|
||||
WHERE row_id in (SELECT row_id FROM new_table WHERE col = 's' AND col2 = '3') LIMIT 256",
|
||||
"SELECT
|
||||
a,
|
||||
b as c
|
||||
FROM
|
||||
`ab`;
|
||||
UPDATE
|
||||
`cd`
|
||||
SET
|
||||
`col` = REPLACE(col, 'find', 'replace')
|
||||
WHERE
|
||||
row_id in (
|
||||
SELECT
|
||||
row_id
|
||||
FROM
|
||||
new_table
|
||||
WHERE
|
||||
col = 's'
|
||||
AND col2 = '3'
|
||||
)
|
||||
LIMIT
|
||||
256"
|
||||
),
|
||||
|
||||
array(
|
||||
"INSERT INTO `a_long_table_name_it_is_really_log_but_still_not_that_long`
|
||||
(a, b, c, d, e, f, g, a, b, c, d, e, f, c, d, e)
|
||||
VALUES (1, 0, '', 1, NOW(), NOW(), 0),
|
||||
(1, 0, 'helloabcdefgijk', 1, 'hello_world_again', NOW(), 0)",
|
||||
"INSERT INTO `a_long_table_name_it_is_really_log_but_still_not_that_long` (
|
||||
a, b, c, d, e, f, g, a, b, c, d, e, f, c, d, e
|
||||
)
|
||||
VALUES
|
||||
(1, 0, '', 1, NOW(), NOW(), 0),
|
||||
(
|
||||
1, 0, 'helloabcdefgijk', 1, 'hello_world_again',
|
||||
NOW(), 0
|
||||
)"
|
||||
),
|
||||
|
||||
array(
|
||||
"ALTER TABLE `PREFIX_product` DROP `reduction_price`,DROP `reduction_percent`,
|
||||
DROP `reduction_from`, DROP `reduction_to`",
|
||||
"ALTER TABLE
|
||||
`PREFIX_product`
|
||||
DROP
|
||||
`reduction_price`,
|
||||
DROP
|
||||
`reduction_percent`,
|
||||
DROP
|
||||
`reduction_from`,
|
||||
DROP
|
||||
`reduction_to`"
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for SqlFormatter::format
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider formatDataProvider
|
||||
*/
|
||||
public function testSqlFormatter_format($query, $expected)
|
||||
{
|
||||
SqlFormatter::$tab = "\t";
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
SqlFormatter::format($query, false)
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user