SQL Formatter は、 SQL クエリをきれいに印刷するための JavaScript ライブラリです。
PHP ライブラリの移植として始まりましたが、その後大幅に分岐しました。
さまざまな 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 (および Presto) )。詳細については、言語オプションのドキュメントを参照してください。
次のものはサポートしていません。
;
。→デモを試してみる。
NPM から最新バージョンを入手します。
npm install sql-formatter
糸でもご利用いただけます:
yarn add sql-formatter
import { format } from 'sql-formatter' ;
console . log ( format ( 'SELECT * FROM tbl' , { language : 'mysql' } ) ) ;
これにより以下が出力されます:
SELECT
*
FROM
tbl
構成オプションを渡すこともできます。
format ( 'SELECT * FROM tbl' , {
language : 'spark' ,
tabWidth : 2 ,
keywordCase : 'upper' ,
linesBetweenQueries : 2 ,
} ) ;
SQL のセクションを無効/有効コメントで囲むことにより、そのセクションのフォーマッタを無効にできます。
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;
これにより次のものが生成されます。
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
*
FROM
tbl2;
フォーマッタは、これらのコメント間のコードを解析しません。そのため、SQL Formatter をクラッシュさせる SQL があった場合には、(少なくとも SQL Formatter で問題が修正されるまでは) 原因をコメントアウトすることができます。
このライブラリでは、書式設定に加えて、準備された SQL ステートメント内のプレースホルダー置換も実行できます。
format ( 'SELECT * FROM tbl WHERE foo = ?' , {
params : [ "'bar'" ] ,
} ) ;
結果:
SELECT
*
FROM
tbl
WHERE
foo = ' bar '
詳細については、params オプションのドキュメントを参照してください。
CLI ツールはsql-formatter
の下にインストールされ、 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
デフォルトでは、ツールは stdin からクエリを取得し、それらを stdout に処理しますが、入力ファイル名を指定したり、 --output
オプションを使用したりすることもできます。
echo ' select * from tbl where id = 3 ' | sql-formatter
select
*
from
tbl
where
id = 3
このツールは、現在のディレクトリまたは任意の親ディレクトリにある .sql-formatter.json という名前の JSON 構成ファイル、または次の形式の--config
オプションも受け入れます。
{
"language" : " spark " ,
"tabWidth" : 2 ,
"keywordCase" : " upper " ,
"linesBetweenQueries" : 2
}
すべてのフィールドはオプションであり、指定されていないすべてのフィールドにはデフォルト値が入力されます。
language
使用する SQL 言語 ( format()
を使用する場合)。dialect
(バージョン 12 以降でformatDialect()
使用する場合)。tabWidth
使用するインデントの量。useTabs
使用します。keywordCase
キーワードを大文字または小文字にします。dataTypeCase
大文字または小文字のデータ型。functionCase
関数名を大文字または小文字にします。identifierCase
大文字または小文字の識別子。 (実験的! )indentStyle
全体的なインデント スタイルを定義します。 (非推奨です! )logicalOperatorNewline
ブール演算子 (AND、OR、XOR) の前後の改行。expressionWidth
幅 1 行に保持される括弧で囲まれた式内の最大文字数。linesBetweenQueries
クエリの間に挿入する改行の数をクエリします。denseOperators
演算子をスペースなしで密にパックします。newlineBeforeSemicolon
セミコロンを別の行に配置します。params
ホルダー置換用の値のコレクション。paramTypes
サポートするパラメータ プレースホルダのタイプを指定します。モジュール バンドラーを使用しない場合は、リポジトリのクローンを作成し、 npm install
実行して、 /dist
ディレクトリからファイルを取得して<script>
タグ内で使用します。これにより、SQL Formatter がグローバル変数window.sqlFormatter
として使用できるようになります。
最も一般的な原因は、SQL 言語を指定していないことです。単にライブラリを呼び出す代わりに、次のようにします。
format ( 'select [col] from tbl' ) ;
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8
次のように適切な方言を選択してください。
format ( 'select [col] from tbl' , { language : 'transactsql' } ) ;
または、VSCode 拡張機能を使用する場合: [設定] -> [SQL-Formatter-VSCode: SQLFlavourOverride]。
これは通常、アプリケーションを Webpack にバンドルするときに発生します。原因は、Babel ( babel-loader
を介して) がクラス プロパティ構文をサポートするように構成されていないことです。
| export default class ExpressionFormatter {
> inline = false;
この構文はすべての主要なブラウザ (古い IE を除く) で広くサポートされており、そのサポートはデフォルトの@babel/preset-env
に含まれています。
考えられる修正:
@babel/preset-env
に切り替えます@babel/plugin-proposal-class-properties
を含めるPrettier SQL VSCode 拡張機能は、作成者によって保守されなくなりました。
SQL Formatter ライブラリから最新の修正を入手するには、公式の SQL Formatter VSCode 拡張機能を使用してください。
たとえば、次のような SQL があるとします。
SELECT {col1}, {col2} FROM {tablename}
テンプレートは SQL Formatter によって直接サポートされていませんが、回避策は、paramTypes 構成オプションを使用して、これらのテンプレート構造の出現を準備済みステートメントのパラメーター プレースホルダーとして扱うことです。
format ( 'SELECT {col1}, {col2} FROM {tablename};' , {
paramTypes : { custom : [ { regex : String . raw `{w+}` } ] } ,
} ) ;
これは、考えられるすべてのテンプレート構成で機能するわけではありませんが、最も一般的な使用例は解決できるはずです。
このフォーマッタの開発は現在メンテナンス モードです。可能であればバグは修正されますが、新しい機能は追加されない可能性があります。
新しい SQL 整形ツール prettier-plugin-sql-cst を開始しました。
SQL の自動フォーマットを次のレベルに引き上げたい場合は、試してみてください。
CONTRIBUTING.md を参照してください。
マサチューセッツ工科大学