SqlFormatter

Легкий php-пакет для форматирования sql-запросов.

Он может автоматически делать отступы и добавлять переносы строк в дополнение к подсветке синтаксиса.

История

Этот пакет является развилкой от https://github.com/jdorn/sql-formatter Вот что говорится в оригинальном разделе History:

Я обнаружил, что мне постоянно приходится отлаживать автоматически генерируемые SQL-запросы, и мне нужен был способ легко выводить форматированный HTML без необходимости включать огромную библиотеку или копировать и вставлять в онлайн-форматоры.

Изначально я планировал извлечь код форматирования из PhpMyAdmin, но это было 10 000+ строк кода и использовались глобальные переменные.

Я увидел, что у других людей была такая же проблема, и использовал ответ пользователя losif из Stack Overflow в качестве отправной точки. http://stackoverflow.com/a/3924147

- @jdorn

Использование

В классе SqlFormatter есть метод format, который принимает на вход строку SQL и возвращает отформатированный блок.

Пример использования:

<?php
require_once 'vendor/autoload.php';

use Doctrine\SqlFormatter\SqlFormatter;

$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 (new SqlFormatter())->format($query);

Вывод:

форматированный вывод с выделением HTML

Когда вы запускаете php под cli и инстанцируете SqlFormatter без аргумента, выделенный CliHighlighter.

Конструктор SqlFormatter принимает Highlighter реализаций. HtmlHighlighter и т.д.

Только форматирование

Если вам не нужна подсветка синтаксиса, а нужны только отступы и переносы строк, передайте в качестве второго параметра экземпляр NullHighlighter.

Это полезно для вывода в журналы ошибок или другие не-html форматы.

<?php

use Doctrine\SqlFormatter\NullHighlighter;
use Doctrine\SqlFormatter\SqlFormatter;

echo (new SqlFormatter(new NullHighlighter()))->format($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

Только подсветка синтаксиса

Существует отдельный метод highlight, который сохраняет все исходные пробельные символы и только добавляет подсветку синтаксиса.

Это полезно для sql, который уже хорошо отформатирован и просто должен быть немного легче для чтения.

<?php
echo (new SqlFormatter())->highlight($query);

Вывод:

Вывод HTML Highlight

Сжать запрос

Метод 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;
echo (new SqlFormatter())->compress($query);

Вывод:

SELECT Id as temp, DateCreated as Created FROM MyTable;