DBFlute-0.9.8.6 was released.
DBFlute Top
Change Log
Migration Point
※EMecha-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);
}).plus(1);
});
});
自発的に見つけたバグなのですが、
恐らく誰もこのような使い方をしたことが
ないんじゃないかと思います。
(例外になって動かないし)
一方で、ColumnQuery 自体が拡張されました。
o 関数フィルタが使えるように
o 左辺でも演算やフィルタ処理が
o 関数フィルタで日付の切り捨てや日付の加算・減算が
右辺カラムをSQL関数でフィルタ
ColumnQuery や (Query)DerivedReferrer は、
SQL上で条件値が完結するので、こういったフィルタ処理が
欠かせない場面というのが存在します。
これで適用範囲は広がったんじゃないかと。
という感じでSQLの方言と格闘したので、
こんな感じのページも徐々に整備していこうかなと。
-> MySQLの補足資料 - SQL関数
今回は、Java版だけのリリースです。
C#版 (DBFlute.NET) のリリースはお休みです。
Java版だけかなり突っ走っていますが、
突っ走って行き着くところまで行ったら、
DBFlute.NETの方に注力したいと考えています。