SQL Formatter é uma biblioteca JavaScript para consultas SQL de impressão bonita.
Começou como uma porta de uma biblioteca PHP, mas desde então divergiu consideravelmente.
Ele suporta vários dialetos 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 (e Presto ). Consulte a documentação sobre opções de idioma para obter mais detalhes.
Não suporta:
;
.→ Experimente a demonstração.
Obtenha a versão mais recente do NPM:
npm install sql-formatter
Também disponível com fio:
yarn add sql-formatter
import { format } from 'sql-formatter' ;
console . log ( format ( 'SELECT * FROM tbl' , { language : 'mysql' } ) ) ;
Isso produzirá:
SELECT
*
FROM
tbl
Você também pode passar opções de configuração:
format ( 'SELECT * FROM tbl' , {
language : 'spark' ,
tabWidth : 2 ,
keywordCase : 'upper' ,
linesBetweenQueries : 2 ,
} ) ;
Você pode desabilitar o formatador para uma seção do SQL cercando-o com comentários de desabilitar/habilitar:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;
que produz:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
*
FROM
tbl2;
O formatador nem analisa o código entre esses comentários. Portanto, caso haja algum SQL que trave o SQL Formatter, você pode comentar o culpado (pelo menos até que o problema seja corrigido no SQL Formatter).
Além da formatação, esta biblioteca também pode substituir espaços reservados em instruções SQL preparadas:
format ( 'SELECT * FROM tbl WHERE foo = ?' , {
params : [ "'bar'" ] ,
} ) ;
Resultados em:
SELECT
*
FROM
tbl
WHERE
foo = ' bar '
Para obter mais detalhes, consulte a documentação da opção params.
A ferramenta CLI será instalada no sql-formatter
e pode ser invocada via 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
Por padrão, a ferramenta pega consultas do stdin e as processa para stdout, mas também é possível nomear um nome de arquivo de entrada ou usar a opção --output
.
echo ' select * from tbl where id = 3 ' | sql-formatter
select
*
from
tbl
where
id = 3
A ferramenta também aceita um arquivo de configuração JSON chamado .sql-formatter.json no diretório pai atual ou em qualquer diretório pai, ou com a opção --config
que assume este formato:
{
"language" : " spark " ,
"tabWidth" : 2 ,
"keywordCase" : " upper " ,
"linesBetweenQueries" : 2
}
Todos os campos são opcionais e todos os campos não especificados serão preenchidos com seus valores padrão.
language
o dialeto SQL a ser usado (ao usar format()
).dialect
o dialeto SQL a ser usado (ao usar formatDialect()
desde a versão 12).tabWidth
quantidade de recuo a ser usado.useTabs
para usar tabulações para recuo.keywordCase
ou minúsculas.dataTypeCase
tipos de dados em letras maiúsculas ou minúsculas.functionCase
nomes de funções em letras maiúsculas ou minúsculas.identifierCase
identificadores em maiúsculas ou minúsculas. ( experimental! )indentStyle
define o estilo geral de recuo. ( obsoleto! )logicalOperatorNewline
nova linha antes ou depois do operador booleano (AND, OR, XOR).expressionWidth
número máximo de caracteres entre expressões entre parênteses a serem mantidos em uma única linha.linesBetweenQueries
quantas novas linhas inserir entre as consultas.denseOperators
compacta operadores densamente sem espaços.newlineBeforeSemicolon
coloca ponto e vírgula em linhas separadas.params
de valores para substituição de espaço reservado.paramTypes
especifica os tipos de espaços reservados de parâmetros a serem suportados. Se você não usa um empacotador de módulo, clone o repositório, execute npm install
e pegue um arquivo do diretório /dist
para usar dentro de uma tag <script>
. Isso disponibiliza o SQL Formatter como uma variável global window.sqlFormatter
.
A causa mais comum é que você não especificou um dialeto SQL. Em vez de chamar a biblioteca simplesmente:
format ( 'select [col] from tbl' ) ;
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8
escolha o dialeto adequado, como:
format ( 'select [col] from tbl' , { language : 'transactsql' } ) ;
Ou ao usar a extensão VSCode: Configurações -> SQL-Formatter-VSCode: SQLFlavourOverride.
Isso normalmente acontece ao agrupar um aplicativo com o Webpack. A causa é que o Babel (por meio babel-loader
) não está configurado para suportar a sintaxe das propriedades da classe:
| export default class ExpressionFormatter {
> inline = false;
Esta sintaxe é amplamente suportada em todos os principais navegadores (exceto o antigo IE) e o suporte para ela está incluído no padrão @babel/preset-env
.
Possíveis correções:
@babel/preset-env
@babel/plugin-proposal-class-properties
A extensão Prettier SQL VSCode não é mais mantida por seu autor.
Use a extensão oficial do SQL Formatter VSCode para obter as correções mais recentes da biblioteca SQL Formatter.
Por exemplo, você pode ter um SQL como:
SELECT {col1}, {col2} FROM {tablename}
Embora a modelagem não seja diretamente suportada pelo SQL Formatter, a solução alternativa é usar a opção de configuração paramTypes para tratar essas ocorrências de construções de modelagem como espaços reservados para parâmetros de instruções preparadas:
format ( 'SELECT {col1}, {col2} FROM {tablename};' , {
paramTypes : { custom : [ { regex : String . raw `{w+}` } ] } ,
} ) ;
Isso não funcionará para todas as construções de modelos possíveis, mas deverá resolver os casos de uso mais comuns.
O desenvolvimento deste formatador está atualmente em modo de manutenção. Os bugs serão corrigidos se possível, mas novos recursos provavelmente não serão adicionados.
Iniciei uma nova ferramenta de formatação SQL: prettier-plugin-sql-cst.
Experimente se quiser levar a formatação automática do SQL para o próximo nível.
Por favor, consulte CONTRIBUTING.md
MIT