SQL文のフォーマットを行います。 標準入力から受け取ったSQL文をフォーマットして、標準出力に出力します。
echo "SELECT * FROM HOGE WHERE HOGE.FUGA = :fuga" | java -jar target/sql-formatter-1.0.1-jar-with-dependencies.jar
SELECT * FROM HOGE WHERE HOGE.FUGA = :fuga
Hibernateのorg.hibernate.engine.jdbc.internal.BasicFormatterImplを使用しています。
- Looking for an embeddable SQL beautifier or reformatter
ビルドが面倒な場合は、binaryディレクトリ配下のjarをダウンロードしてください。
Emacsでは、リージョン内の内容を外部コマンドに渡して、その結果でバッファを書き換えることができます。 これを利用してSQL文の整形をEmacs上で行います。
;;; SQL文の整形をする設定
;; 実行する外部コマンド
(setq sql-format-external-command
(concat "java -jar " (expand-file-name "~/.emacs.d/lib/sql-formatter-1.0.0-jar-with-dependencies.jar")))
;; SQL文をフォーマットする関数
(defun my-format-sql ()
"バッファまたはリージョン内のSQL文を整形する。"
(interactive)
(let (begin end)
(cond (mark-active
(setq begin (region-beginning))
(setq end (region-end)))
(t
(setq begin (point-min))
(setq end (point-max))))
(save-excursion
(shell-command-on-region
begin
end
sql-format-external-command
nil
t ; replace buffer
))))
;; キーバインド設定
(with-eval-after-load "sql"
(define-key sql-mode-map (kbd "C-S-f") 'my-format-sql))