DBFlute -- CBのSQLのフォーマット

次期バージョン「DBFlute-0.6.8」より、
ConditionBeanで生成するSQLを見やすくフォーマットする
機能を追加します。(単純に改行を入れてるだけですけど...)

どういうことか?

現状、ConditionBeanで自動生成したSQLは、
改行なしの「棒一本」のSQLになります。
コンソールログ上などでは、Where句とかはずーーと右端まで
スクロールしないと見ることができません。
Windowの幅で自動改行するエディタで見ても、
どこにfromやwhereがあるのかわかったもんじゃない感じです。
select ... from ... where ... order by ......
いくら自動生成で保証されているからと言って、出力されたSQLを
全く見ないということはありません。単に「想定通りのSQLで安心」
を確認するだけでなく、画面入力された条件値などの確認とかで
動作確認においても利用されます。

右端までスクロールするか、コピーしてSQLツールでフォーマットするか、
いずれかの行為を開発者が結構していたかと思います。
余談ですが、osqleditはleft outer joinをフォーマットしません。
SQLフォーマットツールとしてはかなりレベルが高いのですが、
Oracle依存の名残かどうか知りませんが、left outer joinだけ
取り残されていてこれまた結構面倒だったり...

次のバージョンではこのように指定可能です。
MemberCB cb = new MemberCB();
cb.formatSql();// ★
cb.setupSelect_...;
cb.query().setXxx...
すると、発行されるSQLは以下のよう整頓されます。
select ...
  from ...
 where ...
 order by ...
実際にこれを使ったExampleでログを見てみるとかなり実感できます。
https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example

DBFluteBasicExample
MemberCBOptionTest#test_ConditionBean_formatSql_Tx()
にて確認することが可能です。
条件の多いConditionBeanの場合はとても有効かと思います。

この機能は、実際に発行するSQL自体に改行を入れています。

どういうことか?

SQLがみやすくあって欲しいのは実行後も同じです。
DB上で、「遅いSQL/ロックの掛かったSQL/最近のSQL/...など」を
内部情報から抽出する場合も全く同じなのです。わかりやすい方が良いです。

この機能の位置づけとしては、
「外だしSQLでエディタで見やすく改行を入れる」
のと同じように
「ConditionBeanで見やすく改行を入れる(入れるのは自動)」
という感じです。
SQLを組み立てるオブジェクトとして、あってもよい機能だと判断しました。