PICO_SQL_PRETTY¶
Скалярная функция PICO_SQL_PRETTY форматирует текст SQL-запроса так же,
как EXPLAIN (RAW, FMT) показывает запросы плана.
Функция является строгой.
Синтаксис¶
Правила¶
- Запрос короче 80 символов выводится в одну строку. Функция заменяет лишние пробелы и переводы строк одним пробелом и ставит пробелы вокруг операторов и после запятых.
- В запросе длиной 80 символов и больше каждое предложение (
SELECT,FROM,WHERE,GROUP BY,ORDER BYи так далее) начинается с новой строки. Элементы предложения выводятся на отдельных строках с отступом в два пробела. - Регистр ключевых слов и имен не изменяется.
- Функция не проверяет синтаксис запроса. Параметры
$1и?остаются в тексте. - Если форматирование изменяет лексемы запроса, функция возвращает текст
без изменений. Например, однострочный комментарий
--в середине короткого запроса закрыл бы остаток строки, а обратная косая черта в строковом литерале прочиталась бы как экранирование. - Функция также возвращает текст без изменений, если он длиннее 64 КБ,
круглые скобки и выражения
CASEвложены глубже 64 уровней или в тексте есть последовательность символов без пробелов длиннее 1024 байт: форматирование такого текста заняло бы слишком много времени и памяти. - Результат имеет тип
TEXT.
Примеры¶
SELECT pico_sql_pretty('select a,b from t where a=$1');
Результат
+-----------------------------------+
| col_1 |
+===================================+
| "select a, b from t where a = $1" |
+-----------------------------------+
Длинный запрос выводится на нескольких строках:
SELECT pico_sql_pretty(
'select t.a, t.b, count(*) from some_long_table_name t' ||
' join other_table o on t.a = o.a where t.b > 10' ||
' group by t.a, t.b order by 3 desc');
Результат
select
t.a,
t.b,
count(*)
from
some_long_table_name t
join other_table o on t.a = o.a
where
t.b > 10
group by
t.a,
t.b
order by
3 desc