DBFlute: OutsideSqlTest

DBFluteクライアントの直下にgenerate.batと並んで
「outside-sql-test.bat(.sh)」というバッチがあります。
これは

「外だしSQLを2WaySQLとして一括実行」

します。

つまり、外だしSQLの一括テストです。
落ちたSQLは、SQLの文法的にどこか間違っています。
普段、ディベロッパーがSQLを実装して確認するのにも
使うのも当然ですが、なんといってもDB構造が変わった
ときに影響範囲を特定するのに役に立ちます(本当に役立ちます)。
後は、遅いSQLの発見にも役に立ちます。
実案件で実際に利用しています。
目立たない地味な機能ですが、もう手放せない機能ですね。

そういうこともあり、DBFluteには「プログラム上でSQLを埋め込む」
機能がありません。あくまでConditionBean or 外だしSQLの2つだけです。
「プログラム上でSQLを埋め込む」とこのように一括テストのような
形で検証することができません(つかまえることができない)。
ちょっとした短いSQLでもConditionBean以外のSQLは外だしSQLで
一括テストの管理内とするのがDBFluteのポリシーです。

「outside-sql-test.bat(.sh)」を実行して、コンソールのログを
みて正常終了ならOK。何か落ちてたら例外が発生します。

コンソール(コマンドプロンプト)のウィンドウサイズやフォントサイズ
を調整することをお奨めします。
(自分はMSゴシックの10くらいにして横幅3000くらいにしてます)
コンソールでなくても、DBFluteクライアントのlog/dbflute.logに
実行結果が出力されているのでそこで確認することも可能です。

但し、ときどきテストで簡単に実行されると困るSQLがあります。
主にテストデータが大量に入ってる環境で、
「truncate table xxx」で消しちゃ困るとか
「夜間バッチ用のmerge文」とかで一回のSQLで実行時間に
30分掛かってしまう(正当な理由で遅い)とか、などです。
その場合は、テストは割り切って実行対象外にします。
SQLの方に

    -- #df:x#

とコメント一行入れておくと、OutsideSqlTestの対象外になりあす。
ディベロッパーがこれを悪用して、2WaySQLをサボると大変なので、
ログの最後に何件対象外にしたか出るようにしています。


# 将来的には、EclipseのPlugin(EMecha)経由で実行して、
# 結果をもっと見やすい形で出せるようにしたいと考えています。
# SQLを書いたらショートカットキーですぐにその場で実行とか。


【追記】
Sql2Entityでも上記と似たようなメリットを得ることができますが、
Sql2EntityはSql2Entity対象のSQLしか実行しないので、
本当に全てのSQLを実行したいときはOutsideSqlTestとなります。