Форматирование SQL-запросов
Форматирование SQL: переносы по клаузам, отступы подзапросов и JOIN, верхний регистр ключевых слов. Литералы и комментарии не трогаются.
Что форматтер делает и чего не делает
Клаузы (SELECT, FROM, WHERE, JOIN) встают на свои строки, тело клаузы — с отступом, подзапрос получает собственный уровень. В регистр поднимаются только служебные слова: имена функций и колонок остаются как в исходнике. Строковые литералы ('select') и комментарии переносятся как есть — внутри них форматтер не смотрит на ключевые слова. Диалект — общий; комментарий -- всегда завершает строку, поэтому и в режиме «в одну строку» он даёт перенос.
Последние запросы
В истории — сводка со счётчиками и режимом: сам запрос не сохраняется.
Готовые примеры
Найдено: 4 из 4
- Отформатировать SELECT с JOINЗапрос из трёх таблиц слипся в один поток: форматтер разносит клаузы по строкам, а JOIN и ON ставит на свои отступы.
- Отступы подзапросов в SQLСкалярный подзапрос в списке колонок и подзапрос в условии IN: каждый получает собственный уровень отступа, скобка закрывается на уровне открывающей строки.
- Отформатировать INSERT со списком VALUESМногострочная вставка: список колонок остаётся компактным, а каждая строка VALUES встаёт отдельной строкой с выровненным отступом.
- Комментарии и строковые литералы остаются как естьКлючевые слова внутри строкового литерала и комментария — данные, а не команды: форматтер поднимает регистр только у настоящих ключевых слов запроса.
Что это и как пользоваться
Форматтер раскладывает запрос по клаузам: SELECT, FROM, WHERE, JOIN, GROUP BY, ORDER BY — каждая с новой строки, подзапросы с отступом. Режимов два: pretty с переносами и compact, который сжимает запрос без потери читаемости.
Переносы ставятся перед клаузами, а не после: SELECT и FROM начинают строку, поэтому запрос читается сверху вниз по смыслу, а не по кускам.
Отступ настраивается — 2 пробела, 4 или табуляция, — а регистр ключевых слов переключается между верхним и нижним. Это важно не само по себе, а потому что единый стиль в репозитории убирает шум в diff.
Строковые литералы и комментарии не трогаются: select внутри кавычек остаётся данными, а не ключевым словом, и регистр в нём не меняется.
Форматирование чисто текстовое: запрос не исполняется и не проверяется против схемы, поэтому синтаксическая ошибка останется в выводе как есть.
Когда пригодится
- Развернуть однострочный запрос из лога в структуру, по которой видно, что с чем соединяется.
- Привести запросы в репозитории к одному стилю перед ревью.
- Найти потерянную скобку: с отступами вложенность подзапросов становится видимой.
- Сжать запрос в одну-две строки для вставки в конфиг или в лог, не теряя пробелов вокруг операторов.
- Подготовить запрос для документации или тикета в читаемом виде.
- Прочитать сгенерированный ORM запрос и понять, в каком порядке идут JOIN и подзапросы.
Чего инструмент не делает
- Диалекты не различаются: специфичный для PostgreSQL или Oracle синтаксис может отформатироваться неидеально.
- Запрос не переписывается и не оптимизируется: страница не подскажет, что мешает использовать индекс.
- Ошибки не исправляются: недостающее ключевое слово или лишняя запятая останутся в выводе.
- Регистр внутри строковых литералов сохраняется как есть: «select» в кавычках не станет «SELECT».
- Ввод ограничен 2 млн знаков; дампы и миграции целиком лучше форматировать частями.
- Диалектные расширения вроде RETURNING или LATERAL переносятся как обычные слова и могут встать не по стилю.
Примеры
- Вход
SELECT a,b FROM t WHERE x=1- Выход
SELECT a, b FROM t WHERE x = 1- Вход
вложенный JOIN в режиме pretty- Выход
подзапросы и JOIN получают отдельные отступы