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);
Вывод:
Когда вы запускаете 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);
Вывод:
Сжать запрос
Метод 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;