SQL Formatter ist eine JavaScript-Bibliothek zum hübschen Drucken von SQL-Abfragen.
Es begann als Portierung einer PHP-Bibliothek, hat sich aber seitdem erheblich weiterentwickelt.
Es unterstützt verschiedene SQL-Dialekte: 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 (und Presto). ). Weitere Einzelheiten finden Sie in der Dokumentation zu den Sprachoptionen.
Es unterstützt nicht:
;
.→ Probieren Sie die Demo aus.
Holen Sie sich die neueste Version von NPM:
npm install sql-formatter
Auch mit Garn erhältlich:
yarn add sql-formatter
import { format } from 'sql-formatter' ;
console . log ( format ( 'SELECT * FROM tbl' , { language : 'mysql' } ) ) ;
Dies wird Folgendes ausgeben:
SELECT
*
FROM
tbl
Sie können auch Konfigurationsoptionen übergeben:
format ( 'SELECT * FROM tbl' , {
language : 'spark' ,
tabWidth : 2 ,
keywordCase : 'upper' ,
linesBetweenQueries : 2 ,
} ) ;
Sie können den Formatierer für einen Abschnitt von SQL deaktivieren, indem Sie ihn mit Deaktivierungs-/Aktivierungskommentaren umgeben:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;
was erzeugt:
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
*
FROM
tbl2;
Der Formatierer analysiert nicht einmal den Code zwischen diesen Kommentaren. Falls es also eine SQL-Anweisung gibt, die den SQL-Formatierer zum Absturz bringt, können Sie den Übeltäter auskommentieren (zumindest bis das Problem im SQL-Formatierer behoben ist).
Zusätzlich zur Formatierung kann diese Bibliothek auch Platzhalterersetzungen in vorbereiteten SQL-Anweisungen durchführen:
format ( 'SELECT * FROM tbl WHERE foo = ?' , {
params : [ "'bar'" ] ,
} ) ;
Ergebnisse in:
SELECT
*
FROM
tbl
WHERE
foo = ' bar '
Weitere Einzelheiten finden Sie in der Dokumentation der Option params.
Das CLI-Tool wird unter sql-formatter
installiert und kann über npx sql-formatter
aufgerufen werden:
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
Standardmäßig nimmt das Tool Anfragen von stdin entgegen und verarbeitet sie an stdout, aber man kann auch einen Eingabedateinamen benennen oder die Option --output
verwenden.
echo ' select * from tbl where id = 3 ' | sql-formatter
select
*
from
tbl
where
id = 3
Das Tool akzeptiert auch eine JSON-Konfigurationsdatei mit dem Namen .sql-formatter.json im aktuellen oder einem übergeordneten Verzeichnis oder mit der Option --config
, die folgende Form hat:
{
"language" : " spark " ,
"tabWidth" : 2 ,
"keywordCase" : " upper " ,
"linesBetweenQueries" : 2
}
Alle Felder sind optional und alle nicht angegebenen Felder werden mit ihren Standardwerten gefüllt.
language
der zu verwendende SQL-Dialekt (bei Verwendung format()
).dialect
der zu verwendende SQL-Dialekt (bei Verwendung von formatDialect()
seit Version 12).tabWidth
wie viel Einzug verwendet werden soll.useTabs
um Tabulatoren zum Einrücken zu verwenden.keywordCase
Groß- oder Kleinschreibung von Schlüsselwörtern.dataTypeCase
Datentypen in Groß- oder Kleinschreibung.functionCase
schreibt Funktionsnamen in Groß- oder Kleinschreibung.identifierCase
Groß- oder Kleinbuchstaben-Bezeichner. ( experimentell! )indentStyle
definiert den allgemeinen Einrückungsstil. ( veraltet! )logicalOperatorNewline
Zeilenumbruch vor oder nach dem booleschen Operator (AND, OR, XOR).expressionWidth
maximale Anzahl von Zeichen in Klammerausdrücken, die in einer einzelnen Zeile gehalten werden sollen.linesBetweenQueries
, wie viele neue Zeilen zwischen Abfragen eingefügt werden sollen.denseOperators
packt Operatoren dicht und ohne Leerzeichen.newlineBeforeSemicolon
platziert das Semikolon in einer separaten Zeile.params
Sammlung von Werten zum Ersetzen von Platzhaltern.paramTypes
gibt die zu unterstützenden Parameter-Platzhaltertypen an. Wenn Sie keinen Modul-Bundler verwenden, klonen Sie das Repository, führen Sie npm install
aus und holen Sie sich eine Datei aus dem Verzeichnis /dist
um sie in einem <script>
-Tag zu verwenden. Dadurch wird SQL Formatter als globale Variable window.sqlFormatter
verfügbar.
Die häufigste Ursache ist, dass Sie keinen SQL-Dialekt angegeben haben. Anstatt die Bibliothek einfach aufzurufen:
format ( 'select [col] from tbl' ) ;
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8
Wählen Sie den richtigen Dialekt, wie zum Beispiel:
format ( 'select [col] from tbl' , { language : 'transactsql' } ) ;
Oder bei Verwendung der VSCode-Erweiterung: Einstellungen -> SQL-Formatter-VSCode: SQLFlavourOverride.
Dies geschieht normalerweise, wenn eine Anwendung mit Webpack gebündelt wird. Die Ursache liegt darin, dass Babel (über babel-loader
) nicht für die Unterstützung der Klasseneigenschaftensyntax konfiguriert ist:
| export default class ExpressionFormatter {
> inline = false;
Diese Syntax wird in allen gängigen Browsern (mit Ausnahme des alten IE) weitgehend unterstützt und ist im Standard @babel/preset-env
enthalten.
Mögliche Korrekturen:
@babel/preset-env
@babel/plugin-proposal-class-properties
einDie Prettier SQL VSCode-Erweiterung wird von ihrem Autor nicht mehr gepflegt.
Bitte verwenden Sie die offizielle SQL Formatter VSCode-Erweiterung, um die neuesten Korrekturen aus der SQL Formatter-Bibliothek zu erhalten.
Beispielsweise könnten Sie ein SQL wie dieses haben:
SELECT {col1}, {col2} FROM {tablename}
Obwohl Vorlagen nicht direkt von SQL Formatter unterstützt werden, besteht die Problemumgehung darin, die Konfigurationsoption paramTypes zu verwenden, um diese Vorkommen von Vorlagenkonstrukten als Parameterplatzhalter für vorbereitete Anweisungen zu behandeln:
format ( 'SELECT {col1}, {col2} FROM {tablename};' , {
paramTypes : { custom : [ { regex : String . raw `{w+}` } ] } ,
} ) ;
Dies funktioniert nicht für alle möglichen Vorlagenkonstrukte, sollte aber die häufigsten Anwendungsfälle lösen.
Die Entwicklung dieses Formatters befindet sich derzeit im Wartungsmodus. Fehler werden nach Möglichkeit behoben, neue Funktionen werden jedoch wahrscheinlich nicht hinzugefügt.
Ich habe ein neues SQL-Formatierungstool gestartet: prettier-plugin-sql-cst.
Probieren Sie es aus, wenn Sie Ihre automatische SQL-Formatierung auf die nächste Stufe bringen möchten.
Bitte sehen Sie sich CONTRIBUTING.md an
MIT