SQL Formatter es una biblioteca de JavaScript para consultas SQL de impresión bonita.
Comenzó como una adaptación de una biblioteca PHP, pero desde entonces se ha diversificado considerablemente.
Admite varios dialectos 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 (y Presto ). Consulte los documentos de opciones de idioma para obtener más detalles.
No soporta:
;
.→ Pruebe la demostración.
Obtenga la última versión de NPM:
npm install sql-formatter
También disponible con hilo:
yarn add sql-formatter
import { format } from 'sql-formatter' ;
console . log ( format ( 'SELECT * FROM tbl' , { language : 'mysql' } ) ) ;
Esto generará:
SELECT
*
FROM
tbl
También puede pasar opciones de configuración:
format ( 'SELECT * FROM tbl' , {
language : 'spark' ,
tabWidth : 2 ,
keywordCase : 'upper' ,
linesBetweenQueries : 2 ,
} ) ;
Puede deshabilitar el formateador de una sección de SQL rodeándolo con comentarios de deshabilitar/habilitar:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;
que produce:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
*
FROM
tbl2;
El formateador ni siquiera analiza el código entre estos comentarios. Entonces, en caso de que haya algo de SQL que bloquee SQL Formatter, puede comentar al culpable (al menos hasta que el problema se solucione en SQL Formatter).
Además de formatear, esta biblioteca también puede realizar el reemplazo de marcadores de posición en sentencias SQL preparadas:
format ( 'SELECT * FROM tbl WHERE foo = ?' , {
params : [ "'bar'" ] ,
} ) ;
Resultados en:
SELECT
*
FROM
tbl
WHERE
foo = ' bar '
Para obtener más detalles, consulte los documentos de la opción de parámetros.
La herramienta CLI se instalará bajo sql-formatter
y se puede invocar a través de 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
De forma predeterminada, la herramienta toma consultas de stdin y las procesa en stdout, pero también se puede nombrar un nombre de archivo de entrada o usar la opción --output
.
echo ' select * from tbl where id = 3 ' | sql-formatter
select
*
from
tbl
where
id = 3
La herramienta también acepta un archivo de configuración JSON llamado .sql-formatter.json en el directorio actual o en cualquier directorio principal, o con la opción --config
que toma esta forma:
{
"language" : " spark " ,
"tabWidth" : 2 ,
"keywordCase" : " upper " ,
"linesBetweenQueries" : 2
}
Todos los campos son opcionales y todos los campos que no estén especificados se completarán con sus valores predeterminados.
language
el dialecto SQL a usar (cuando se usa format()
).dialect
el dialecto SQL a usar (cuando se usa formatDialect()
desde la versión 12).tabWidth
cantidad de sangría a utilizar.useTabs
para usar pestañas para sangría.keywordCase
en mayúsculas o minúsculas.dataTypeCase
tipos de datos en mayúsculas o minúsculas.functionCase
nombres de funciones en mayúsculas o minúsculas.identifierCase
Identificadores de mayúsculas o minúsculas. ( ¡experimental! )indentStyle
define el estilo de sangría general. ( ¡obsoleto! )logicalOperatorNewline
nueva línea antes o después del operador booleano (AND, OR, XOR).expressionWidth
número máximo de caracteres en expresiones entre paréntesis que se mantendrán en una sola línea.linesBetweenQueries
cuántas nuevas líneas insertar entre consultas.denseOperators
empaqueta a los operadores densamente sin espacios.newlineBeforeSemicolon
coloca el punto y coma en una línea separada.params
de valores para el reemplazo de marcadores de posición.paramTypes
especifica los tipos de marcadores de posición de parámetros que se admitirán. Si no utiliza un paquete de módulos, clone el repositorio, ejecute npm install
y tome un archivo del directorio /dist
para usarlo dentro de una etiqueta <script>
. Esto hace que SQL Formatter esté disponible como una variable global window.sqlFormatter
.
La causa más común es que no haya especificado un dialecto SQL. En lugar de llamar a la biblioteca simplemente:
format ( 'select [col] from tbl' ) ;
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8
Elija el dialecto adecuado, como:
format ( 'select [col] from tbl' , { language : 'transactsql' } ) ;
O cuando use la extensión VSCode: Configuración -> SQL-Formatter-VSCode: SQLFlavourOverride.
Esto suele ocurrir al agrupar una aplicación con Webpack. La causa es que Babel (a través de babel-loader
) no está configurado para admitir la sintaxis de propiedades de clase:
| export default class ExpressionFormatter {
> inline = false;
Esta sintaxis es ampliamente compatible con todos los principales navegadores (excepto el antiguo IE) y su compatibilidad se incluye en el @babel/preset-env
predeterminado.
Posibles soluciones:
@babel/preset-env
@babel/plugin-proposal-class-properties
Su autor ya no mantiene la extensión Prettier SQL VSCode.
Utilice la extensión oficial SQL Formatter VSCode para obtener las últimas correcciones de la biblioteca SQL Formatter.
Por ejemplo, es posible que tenga un SQL como:
SELECT {col1}, {col2} FROM {tablename}
Si bien SQL Formatter no admite directamente las plantillas, la solución alternativa es utilizar la opción de configuración paramTypes para tratar estas apariciones de construcciones de plantillas como marcadores de posición de parámetros de declaración preparada:
format ( 'SELECT {col1}, {col2} FROM {tablename};' , {
paramTypes : { custom : [ { regex : String . raw `{w+}` } ] } ,
} ) ;
Esto no funcionará para todas las construcciones de plantillas posibles, pero debería resolver los casos de uso más comunes.
El desarrollo de este formateador se encuentra actualmente en modo de mantenimiento. Los errores se corregirán si es posible, pero es probable que no se agreguen nuevas funciones.
Comencé una nueva herramienta de formato SQL: prettier-plugin-sql-cst.
Pruébelo si desea llevar el formato automático de SQL al siguiente nivel.
Por favor consulte CONTRIBUTING.md
MIT