SQL Formatter est une bibliothèque JavaScript permettant d'imprimer des requêtes SQL.
Cela a commencé comme un portage d'une bibliothèque PHP, mais a depuis considérablement divergé.
Il prend en charge divers dialectes 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 (et Presto ). Consultez la documentation sur les options de langue pour plus de détails.
Il ne prend pas en charge :
;
.→ Essayez la démo.
Obtenez la dernière version de NPM :
npm install sql-formatter
Également disponible avec du fil :
yarn add sql-formatter
import { format } from 'sql-formatter' ;
console . log ( format ( 'SELECT * FROM tbl' , { language : 'mysql' } ) ) ;
Cela produira :
SELECT
*
FROM
tbl
Vous pouvez également transmettre les options de configuration :
format ( 'SELECT * FROM tbl' , {
language : 'spark' ,
tabWidth : 2 ,
keywordCase : 'upper' ,
linesBetweenQueries : 2 ,
} ) ;
Vous pouvez désactiver le formateur pour une section de SQL en l'entourant de commentaires désactiver/activer :
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;
qui produit :
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
*
FROM
tbl2;
Le formateur n'analyse même pas le code entre ces commentaires. Ainsi, au cas où du SQL planterait SQL Formatter, vous pouvez commenter le coupable (au moins jusqu'à ce que le problème soit résolu dans SQL Formatter).
En plus du formatage, cette bibliothèque peut également effectuer le remplacement d'espaces réservés dans les instructions SQL préparées :
format ( 'SELECT * FROM tbl WHERE foo = ?' , {
params : [ "'bar'" ] ,
} ) ;
Résultats en :
SELECT
*
FROM
tbl
WHERE
foo = ' bar '
Pour plus de détails, voir la documentation de l'option params.
L'outil CLI sera installé sous sql-formatter
et pourra être invoqué 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
Par défaut, l'outil prend les requêtes de stdin et les traite vers stdout, mais on peut également nommer un nom de fichier d'entrée ou utiliser l'option --output
.
echo ' select * from tbl where id = 3 ' | sql-formatter
select
*
from
tbl
where
id = 3
L'outil accepte également un fichier de configuration JSON nommé .sql-formatter.json dans le répertoire actuel ou n'importe quel répertoire parent, ou avec l'option --config
qui prend cette forme :
{
"language" : " spark " ,
"tabWidth" : 2 ,
"keywordCase" : " upper " ,
"linesBetweenQueries" : 2
}
Tous les champs sont facultatifs et tous les champs non spécifiés seront remplis avec leurs valeurs par défaut.
language
le dialecte SQL à utiliser (lors de l'utilisation format()
).dialect
le dialecte SQL à utiliser (lors de l'utilisation formatDialect()
depuis la version 12).tabWidth
quantité d'indentation à utiliser.useTabs
pour utiliser des onglets pour l'indentation.keywordCase
majuscules ou minuscules mots-clés.dataTypeCase
types de données majuscules ou minuscules.functionCase
noms de fonctions en majuscules ou en minuscules.identifierCase
identifiants majuscules ou minuscules. ( expérimental! )indentStyle
définit le style d'indentation global. ( obsolète ! )logicalOperatorNewline
nouvelle ligne avant ou après l'opérateur booléen (AND, OR, XOR).expressionWidth
nombre maximum de caractères dans les expressions entre parenthèses à conserver sur une seule ligne.linesBetweenQueries
combien de nouvelles lignes insérer entre les requêtes.denseOperators
regroupe les opérateurs de manière dense, sans espaces.newlineBeforeSemicolon
place le point-virgule sur une ligne séparée.params
collection de valeurs pour le remplacement de l'espace réservé.paramTypes
spécifie les types d’espaces réservés de paramètres à prendre en charge. Si vous n'utilisez pas de bundler de modules, clonez le référentiel, exécutez npm install
et récupérez un fichier du répertoire /dist
à utiliser dans une balise <script>
. Cela rend SQL Formatter disponible en tant que variable globale window.sqlFormatter
.
La cause la plus courante est que vous n'avez pas spécifié de dialecte SQL. Au lieu d'appeler simplement la bibliothèque :
format ( 'select [col] from tbl' ) ;
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8
choisissez le dialecte approprié, comme :
format ( 'select [col] from tbl' , { language : 'transactsql' } ) ;
Ou lors de l'utilisation de l'extension VSCode : Paramètres -> SQL-Formatter-VSCode : SQLFlavourOverride.
Cela se produit généralement lors du regroupement d'une application avec Webpack. La cause est que Babel (via babel-loader
) n'est pas configuré pour prendre en charge la syntaxe des propriétés de classe :
| export default class ExpressionFormatter {
> inline = false;
Cette syntaxe est largement prise en charge dans tous les principaux navigateurs (sauf l'ancien IE) et sa prise en charge est incluse dans la valeur par défaut @babel/preset-env
.
Corrections possibles :
@babel/preset-env
@babel/plugin-proposal-class-properties
L'extension Prettier SQL VSCode n'est plus maintenue par son auteur.
Veuillez utiliser l'extension officielle SQL Formatter VSCode pour obtenir les derniers correctifs de la bibliothèque SQL Formatter.
Par exemple, vous pourriez avoir un SQL comme :
SELECT {col1}, {col2} FROM {tablename}
Bien que les modèles ne soient pas directement pris en charge par SQL Formatter, la solution de contournement consiste à utiliser l'option de configuration paramTypes pour traiter ces occurrences de constructions de modèles comme des espaces réservés de paramètres d'instruction préparée :
format ( 'SELECT {col1}, {col2} FROM {tablename};' , {
paramTypes : { custom : [ { regex : String . raw `{w+}` } ] } ,
} ) ;
Cela ne fonctionnera pas pour toutes les constructions de modèles possibles, mais devrait résoudre les cas d'utilisation les plus courants.
Le développement de ce formateur est actuellement en mode maintenance. Les bogues seront corrigés si possible, mais de nouvelles fonctionnalités ne seront probablement pas ajoutées.
J'ai démarré un nouvel outil de formatage SQL : plus joli-plugin-sql-cst.
Essayez-le si vous souhaitez faire passer votre formatage automatique SQL au niveau supérieur.
Veuillez consulter CONTRIBUTING.md
MIT