SQL Formatter — это библиотека JavaScript для удобной печати SQL-запросов.
Он начинался как порт библиотеки PHP, но с тех пор значительно разошелся.
Он поддерживает различные диалекты SQL: GCP BigQuery, IBM DB2, Apache Hive, MariaDB, MySQL, TiDB, Couchbase N1QL, Oracle PL/SQL, PostgreSQL, Amazon Redshift, SingleStoreDB, Snowflake, Spark, SQL Server Transact-SQL, Trino (и Presto). ). Дополнительную информацию см. в документации по языковым опциям.
Он не поддерживает:
;
.→ Попробуйте демо-версию.
Получите последнюю версию от NPM:
npm install sql-formatter
Также есть в наличии с пряжей:
yarn add sql-formatter
import { format } from 'sql-formatter' ;
console . log ( format ( 'SELECT * FROM tbl' , { language : 'mysql' } ) ) ;
Это выведет:
SELECT
*
FROM
tbl
Вы также можете передать параметры конфигурации:
format ( 'SELECT * FROM tbl' , {
language : 'spark' ,
tabWidth : 2 ,
keywordCase : 'upper' ,
linesBetweenQueries : 2 ,
} ) ;
Вы можете отключить форматировщик для раздела SQL, окружив его комментариями «отключить/включить»:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;
который производит:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
*
FROM
tbl2;
Форматер даже не анализирует код между этими комментариями. Таким образом, в случае, если какой-то SQL приведет к сбою SQL Formatter, вы можете прокомментировать виновника (по крайней мере, до тех пор, пока проблема не будет устранена в SQL Formatter).
Помимо форматирования, эта библиотека также может выполнять замену заполнителей в подготовленных операторах SQL:
format ( 'SELECT * FROM tbl WHERE foo = ?' , {
params : [ "'bar'" ] ,
} ) ;
Результаты:
SELECT
*
FROM
tbl
WHERE
foo = ' bar '
Более подробную информацию см. в документации по параметру параметров.
Инструмент CLI будет установлен в sql-formatter
и может быть вызван через npx sql-formatter
:
sql-formatter -h
usage: sql-formatter [-h] [-o OUTPUT]
[-l {bigquery,db2,db2i,hive,mariadb,mysql,n1ql,plsql,postgresql,redshift,singlestoredb,snowflake,spark,sql,sqlite,tidb,transactsql,trino,tsql}] [-c CONFIG] [--version] [FILE]
SQL Formatter
positional arguments:
FILE Input SQL file (defaults to stdin)
optional arguments:
-h, --help show this help message and exit
-o, --output OUTPUT
File to write SQL output (defaults to stdout)
--fix Update the file in-place
-l, --language {bigquery,db2,db2i,hive,mariadb,mysql,n1ql,plsql,postgresql,redshift,singlestoredb,snowflake,spark,sql,sqlite,tidb,trino,tsql}
SQL dialect (defaults to basic sql)
-c, --config CONFIG
Path to config JSON file or json string (will find a file named '.sql-formatter.json' or use default configs if unspecified)
--version show program's version number and exit
По умолчанию инструмент принимает запросы со стандартного ввода и обрабатывает их на стандартный вывод, но можно также указать имя входного файла или использовать опцию --output
.
echo ' select * from tbl where id = 3 ' | sql-formatter
select
*
from
tbl
where
id = 3
Инструмент также принимает файл конфигурации JSON с именем .sql-formatter.json в текущем или любом родительском каталоге или с параметром --config
, который принимает следующую форму:
{
"language" : " spark " ,
"tabWidth" : 2 ,
"keywordCase" : " upper " ,
"linesBetweenQueries" : 2
}
Все поля являются необязательными, и все поля, которые не указаны, будут заполнены значениями по умолчанию.
language
используемый диалект SQL (при использовании format()
).dialect
диалект SQL, который будет использоваться (при использовании formatDialect()
начиная с версии 12).tabWidth
величина используемого отступа.useTabs
для использования табуляции для отступов.keywordCase
верхнем или нижнем регистре.dataTypeCase
типы данных в верхнем или нижнем регистре.functionCase
прописными или строчными.identifierCase
в верхнем или нижнем регистре. ( экспериментально! )indentStyle
определяет общий стиль отступов. ( устарело! )logicalOperatorNewline
строка — новая строка до или после логического оператора (И, ИЛИ, XOR).expressionWidth
максимальное количество символов в выражениях в скобках, которые должны храниться в одной строке.linesBetweenQueries
сколько новых строк вставлять между запросами.denseOperators
плотно упаковывает операторы без пробелов.newlineBeforeSemicolon
помещает точку с запятой в отдельную строку.params
коллекция значений для замены заполнителя.paramTypes
указывает типы заполнителей параметров, которые необходимо поддерживать. Если вы не используете сборщик модулей, клонируйте репозиторий, запустите npm install
и возьмите файл из каталога /dist
для использования внутри тега <script>
. Это делает SQL Formatter доступным как глобальная переменная window.sqlFormatter
.
Наиболее распространенной причиной является то, что вы не указали диалект SQL. Вместо простого вызова библиотеки:
format ( 'select [col] from tbl' ) ;
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8
выберите правильный диалект, например:
format ( 'select [col] from tbl' , { language : 'transactsql' } ) ;
Или при использовании расширения VSCode: Настройки -> SQL-Formatter-VSCode: SQLFlavourOverride.
Обычно это происходит при объединении приложения с помощью Webpack. Причина в том, что Babel (через babel-loader
) не настроен для поддержки синтаксиса свойств класса:
| export default class ExpressionFormatter {
> inline = false;
Этот синтаксис широко поддерживается во всех основных браузерах (кроме старого IE), и его поддержка включена в @babel/preset-env
по умолчанию.
Возможные исправления:
@babel/preset-env
@babel/plugin-proposal-class-properties
Расширение Prettier SQL VSCode больше не поддерживается его автором.
Используйте официальное расширение SQL Formatter VSCode, чтобы получить последние исправления из библиотеки SQL Formatter.
Например, у вас может быть такой SQL:
SELECT {col1}, {col2} FROM {tablename}
Хотя шаблонизация напрямую не поддерживается SQL Formatter, обходным путем является использование параметра конфигурации paramTypes для обработки этих вхождений шаблонных конструкций как заполнителей параметров подготовленного оператора:
format ( 'SELECT {col1}, {col2} FROM {tablename};' , {
paramTypes : { custom : [ { regex : String . raw `{w+}` } ] } ,
} ) ;
Это не будет работать для всех возможных конструкций шаблонов, но должно решить наиболее распространенные случаи использования.
Разработка этого форматтера в настоящее время находится в режиме обслуживания. Ошибки будут исправлены, если это возможно, но новые функции, скорее всего, не будут добавлены.
Я запустил новый инструмент форматирования SQL: prettier-plugin-sql-cst.
Попробуйте, если хотите поднять автоматическое форматирование SQL на новый уровень.
Пожалуйста, посетите CONTRIBUTING.md
Массачусетский технологический институт