Форматирование SQL-запросов
Раскладываем запрос по строкам и отступам, сверяем результат с исходником и разбираем места, которые дорого обходятся: изменение без условия, склейка строк, чувствительные значения в тексте запроса. Запрос не покидает браузер.
Запрос никуда не отправляется: разбор, форматирование и сверка считаются в браузере. Поэтому сюда можно вставлять запросы из логов и из кода как есть.
Результат
Мины
Что делает форматирование
Запрос раскладывается по строкам: ключевые слова начинают строку, поля и условия уходят на отступ, соединения таблиц и условия после AND и OR встают каждое на своё место, подзапросы в скобках раскрываются блоком с отступом. Несколько запросов подряд разделяются пустой строкой.
Обратная кнопка сжимает запрос в одну строку — так его удобно положить в код или в задачу.
Диалекты: кавычки значат разное
Это не мелочь оформления. В MySQL текст в двойных кавычках считается строковым значением, в PostgreSQL — именем таблицы или столбца.
Обратные кавычки работают в MySQL и ClickHouse, квадратные скобки в T-SQL, знак решётки начинает комментарий только в части баз. PostgreSQL умеет доллар-кавычки, внутри которых лежит что угодно, включая точки с запятой.
Поэтому диалект выбирается до разбора: с неверным разбор пойдёт не по смыслу, и половина запроса окажется внутри строки.
Регистр меняется не у всего
Прописными становятся ключевые слова, а имена таблиц и столбцов остаются как написаны: в ряде баз «Users» и «users» считаются разными таблицами.
Слова вроде role, user, value, key и date бывают и ключевыми,
и обычными именами, поэтому их регистр не трогается вовсе. Имя функции
узнаётся по скобке сразу за ним: count(x)
и t.count обрабатываются по-разному.
Результат сверяется с исходником
Форматирование меняет только пробелы, переносы и регистр ключевых слов. Значит после него запрос можно разобрать заново и сверить поток лексем с исходным: они обязаны совпасть до знака. Если что-то разошлось, об этом сказано прямо, а не показано как готовый результат.
Места, которые дорого обходятся
Разбор идёт по тому же дереву лексем, поэтому строки и комментарии за код не принимаются. Называем:
- DELETE и UPDATE без условия. Сюда же условие вида WHERE 1 = 1, которое ставят заготовкой и забывают дописать;
- склейку строки со значением: так собирают запрос подстановкой, и значение с кавычкой внутри меняет его смысл целиком;
- пароли, токены, телефоны, адреса почты и номера карт прямо в тексте запроса. Сами значения мы не показываем — иначе отчёт сам станет утечкой;
- незакрытую кавычку или комментарий, несходящиеся скобки;
- латинские буквы внутри русских имён: «с», «о», «е», «а» есть в обеих раскладках, на вид они одинаковы, а база такое имя не найдёт;
- AND и OR в одном условии без скобок, ограничение числа строк без сортировки, NOT IN с подзапросом.
Запрос остаётся в браузере
В запросах бывают пароли, телефоны и адреса живых людей. На сервер ничего не уходит: разбор, форматирование и сверка считаются на вашей стороне.
Другие инструменты
Просмотр исходного кода страницы
Исходный HTML страницы глазами робота Яндекса или Google
Визуальный HTML-редактор
Пишете как в текстовом редакторе — получаете готовый HTML
Код цвета HTML
Код цвета в HEX, RGB, HSL и HSB, с проверкой контраста
Эффект стекла в CSS
Стекло с проверкой читаемости надписи и запасным вариантом
Конвертер CSS в SCSS и обратно
CSS в SCSS со вложенностью и обратно, со сверкой результата
Конструктор сеток CSS Grid
Сетка под три экрана с готовым HTML и проверкой порядка блоков