DBFlute-0.9.8.6 Released

DBFlute-0.9.8.6 was released.

DBFlute Top
Change Log
Migration PointEMecha-0.5.1.8 も同時にリリースされています。
 (新規プロジェクトを作成する場合はEMechaも最新に)
久しぶりに、ConditionBean でバグがありました。
どういうバグかと言うと、

ExistsReferrer や DerivedReferrer などの
サブクエリの中で ColumnQuery を利用し、
右辺カラムで導出カラム(DerivedReferrer)を
利用して、coalesce や Query でバインド変数を
利用する条件値を指定して、かつ、その右辺カラムに
対して + 1 などの演算処理を加えると、
右辺カラムで指定したバインド変数が null になって
SQL実行以前に例外になってしまうというバグです。

ふぅ...
つまり、以下のような感じです。
MemberStatusCB cb = new MemberStatusCB();
cb.query().existsMemberList(new ...() {
    subCB.columnQuery(new ...() {
        cb.specify().columnBirthdate();
    }.greaterEqual(new ...() {
        cb.specify().specifyPurchaseList().max(new ...() {
            subCB.query().setProductId_Equal(3); // *Point
        }).plus(1); // *Point
    });
});
自発的に見つけたバグなのですが、
恐らく誰もこのような使い方をしたことが
ないんじゃないかと思います。
(例外になって動かないし)
一方で、ColumnQuery 自体が拡張されました。

o 関数フィルタが使えるように
o 左辺でも演算やフィルタ処理が
o 関数フィルタで日付の切り捨てや日付の加算・減算が

右辺カラムをSQL関数でフィルタ 

ColumnQuery や (Query)DerivedReferrer は、
SQL上で条件値が完結するので、こういったフィルタ処理が
欠かせない場面というのが存在します。
これで適用範囲は広がったんじゃないかと。

という感じでSQLの方言と格闘したので、
こんな感じのページも徐々に整備していこうかなと。
 -> MySQLの補足資料 - SQL関数
今回は、Java版だけのリリースです。
C#版 (DBFlute.NET) のリリースはお休みです。

Java版だけかなり突っ走っていますが、
突っ走って行き着くところまで行ったら、
DBFlute.NETの方に注力したいと考えています。