はじめに
「ログに出力されたSQLを整形したいけど整形ツールが手元にない」、「社用PCだからダウンロードも勝手にできない」、ってことがよくあったので簡易的な整形ツールを作りました。
ただキーワードの前後で改行するだけのツールです。
インデント調整とか高度なことはできないです。
作った関数
formatSql.js
function formatSql(text){
// 改行するキーワード
var array=["AND","FROM","FULL","GROUP","INNER","LEFT","ON","ORDER","RIGHT","SET","WHERE","VALUES"];
// キーワード共通処理
for(i=0; i<array.length; i++){
var keyword = array[i];
var after = " " + keyword + " ";
// キーワード前後の半角スペースを1つだけにする
text = text.replace(new RegExp(" +" + keyword + " +", "g"), after);
// この時点でキーワード" AND "は" AND "になる
// 改行する
var afterRn = "\r\n" + after;
text = text.replace(new RegExp(after, "g"), afterRn);
}
// SELECT:後ろ改行
text = text.replace(/SELECT/g, "SELECT\r\n");
// カンマ:前後のスペース削除
text = text.replace(/( +,|, +| +, +)/g, ",");
// カンマ:改行(前カンマ)
text = text.replace(/,/g, "\r\n , ");
// かっこ:改行
text = text.replace(/\(/g, "(\r\n");
text = text.replace(/\)/g, "\r\n)\r\n");
return text;
}
使い方
- サクラエディタの場合
- ブラウザの場合
サクラエディタの場合
- 以下のスクリプトを共通設定のマクロに設定する。
- 整形したい文字列を選択する。
- ツールの登録済みマクロから設定したマクロを選択する。
formatSql.js
function formatSql(text){
// 省略
}
var text = Editor.GetSelectedString(0);
if ( text !== "" ) Editor.InsText(formatSql(text));
ショートカットキーに登録するのもいいですね。
ブラウザの場合
- scriptタグに追加する。
- ブラウザで開いてリロードする。
formatSql.html
<script type="text/javascript">
function formatSql(text){
// 省略
}
var text="SELECT id , name FROM table1 WHERE key = ?";
text = formatSq(text);
document.write(text);
</script>
入力用テキストボックスを設けるのもいいですね。
あとがき
以下の記事の一部だったものです。
コードが汚かったので改良しました。
⇒新しい現場に入ったときメモ