Ein Prettier-Plugin für SQL, das sql-parser-cst und den eigentlichen Prettier-Formatierungsalgorithmus verwendet.
Probieren Sie es live aus!
Wie Prettier für JavaScript formatiert dieses Plugin SQL-Ausdrücke je nach Länge unterschiedlich. Eine kurze SQL-Abfrage wird in einer einzelnen Zeile formatiert:
SELECT a, b, c FROM tbl WHERE x > 10 ;
Bei einer längeren Abfrage wird jede Klausel in einer separaten Zeile gedruckt:
SELECT id, client . name , client . priority
FROM client
WHERE client . id IN ( 12 , 18 , 121 );
Bei einer noch längeren Variante wird der Inhalt jeder Klausel eingerückt angezeigt:
SELECT
client . id ,
client . name AS client_name,
organization . name AS org_name,
count ( orders . id ) AS nr_of_orders
FROM
client
LEFT JOIN organization ON client . organization_id = organization . id
LEFT JOIN orders ON orders . client_id = client . id
WHERE
client . status = ' active '
AND client . id IN ( 28 , 214 , 457 )
AND orders . status IN ( ' active ' , ' pending ' , ' processing ' )
GROUP BY client . id
ORDER BY client . name
LIMIT 100 ;
Derzeit behält dieses Plugin die meisten Syntaxelemente bei und konzentriert sich hauptsächlich auf das Layout von Leerzeichen.
Eine Übersicht über den verwendeten SQL-Formatierungsstil finden Sie unter STYLE_GUIDE.
Installieren Sie es wie jedes andere Prettier-Plugin:
npm install --save-dev prettier prettier-plugin-sql-cst
# or
pnpm add --save-dev prettier prettier-plugin-sql-cst
# or
yarn add --dev prettier prettier-plugin-sql-cst
Verwenden Sie es dann für SQL-Dateien über das Prettier-Befehlszeilentool oder die Prettier-Erweiterung für den Editor Ihrer Wahl.
Standardmäßig bestimmt das Plugin den SQL-Dialekt basierend auf der Dateierweiterung:
.sql
oder .sqlite
– SQLite.bigquery
– BigQuery Sie können dieses Verhalten mit einer hübscheren Konfiguration in der Datei .prettierrc.json
überschreiben:
{
"plugins" : [ " prettier-plugin-sql-cst " ],
"overrides" : [
{
"files" : [ " *.sql " ],
"options" : { "parser" : " bigquery " }
}
]
}
Oder Sie können es auch in Ihrer package.json
speichern:
{
"prettier" : {
"plugins" : [ " prettier-plugin-sql-cst " ],
"overrides" : [
{
"files" : [ " *.sql " ],
"options" : { "parser" : " bigquery " }
}
]
}
}
Das Plugin stellt die folgenden Parser bereit:
sqlite
bigquery
postgresql
( experimentell! Abstürze erwarten )mysql
( experimentell! Abstürze erwarten )mariadb
( experimentell! Abstürze erwarten ) Es gelten die standardmäßigen Prettier-Optionen printWidth, tabWidth und useTabs. Es gibt auch einige SQL-spezifische Optionen:
API-Option | Standard | Beschreibung |
---|---|---|
sqlKeywordCase | upper | Konvertiert SQL-Schlüsselwörter in upper oder lower oder preserve bestehende bei. Beachten Sie, dass preserve derzeit etwas inkompatibel mit sqlCanonicalSyntax: true ist (z. B. werden die hinzugefügten AS Schlüsselwörter immer in Großbuchstaben geschrieben). |
sqlParamTypes | [] | Array gebundener Parametertypen: ? , ?nr , $nr , :name , @name , $name . |
sqlCanonicalSyntax | true | Wenn diese Option aktiviert ist, werden bestimmte Änderungen an Schlüsselwörtern und Operatoren vorgenommen, z. B. die Verwendung von AS in Aliasnamen erzwungen und <> -Vergleiche durch != ersetzt werden. Weitere Einzelheiten finden Sie im STYLE_GUIDE. (Seit 0.11.0) |
sqlAcceptUnsupportedGrammar | false | Wenn das Plugin auf eine SQL-Syntax stößt, die es nicht unterstützt, gibt es normalerweise einen Fehler aus und formatiert überhaupt nichts. Wenn diese Option aktiviert ist, werden nicht erkannte SQL-Anweisungen übersprungen und unverändert belassen. |
Um dieses Plugin in VSCode zu verwenden, installieren Sie die Prettier VSCode-Erweiterung.
Befolgen Sie die Prettier VSCode-Dokumentation, um es als Standardformatierer zu konfigurieren.
Möglicherweise müssen Sie auch prettier.documentSelectors konfigurieren, um Prettier für *.sql
Dateien zu aktivieren.
Um zu sehen, was Prettier tut und was nicht, öffnen Sie das VSCode-Ausgabefenster und wählen Sie das Dropdown-Menü „Prettier“ aus. Beim Formatieren sollte das Fenster Ihren inferredParser
anzeigen. Es sollte dies erneut bestätigen, indem es "parser": "sqlite"
(oder den Perser, den Sie in Ihrem Abschnitt „Prettier Config overrides
“ konfiguriert haben) und plugins
mit dem Pfad zu diesem Paket anzeigt. Wenn Sie diesen Teil nicht sehen, verwendet Prettier dieses Paket nicht.
Die Unterstützung neuer SQL-Dialekte hängt davon ab, dass diese Dialekte von sql-parser-cst unterstützt werden. Wenn Sie wirklich möchten, können Sie im Parser-Repo ein neues Problem dafür eröffnen. Beachten Sie jedoch, dass die Implementierung der Parser-Unterstützung für neue Dialekte viel Arbeit erfordert. Solange die laufende Implementierung von PostgreSQL, MySQL und MariaDB noch nicht abgeschlossen ist, ist es unwahrscheinlich, dass mit der Arbeit an einem anderen Dialekt begonnen wird.
Verwenden Sie prettier-plugin-embed zusammen mit prettier-plugin-sql-cst
.
Derzeit unterstützt dieses Plugin zwei SQL-Dialekte:
Es bietet außerdem experimentelle Unterstützung für die folgenden Dialekte:
Die Haupteinschränkung besteht darin, dass der Parser nicht die vollständige Syntax dieser Dialekte unterstützt. Man sollte damit rechnen, dass der Parser abstürzt, wenn die Syntax spezieller für diese Dialekte ist. Aber solange das Parsen gelingt, sollte auch die Formatierung gelingen. Hauptsächlich kann man davon ausgehen, dass die Formatierung der SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen funktioniert.
Um diese Einschränkung zu überwinden, können Sie die Option sqlAcceptUnsupportedGrammar
aktivieren, wodurch das Plugin die SQL-Anweisungen überspringt, die es nicht erkennt.
Die Besonderheiten des SQL-Formatierungsstils können sich noch stark ändern. Allerdings sollten die allgemeinen Grundsätze inzwischen weitgehend vorhanden sein.