[Seasar-user:20143] Re: 【DBFlute】 (Query)DerivedReferrerについて

kubo [E-MAIL ADDRESS DELETED]
2010年 9月 10日 (金) 17:34:59 JST


久保(jflute)です。

> ありがとうございます。
> 軽く調べてみましたが大丈夫そうですね。少なくとも、
> DerivedReferrer系では対応しようかと思います。
> (日付型とか他の型はどうするかちょっと考えます)

o バインド変数にするかどうか(そもそも可能か)
o ユーザインターフェースをどっちにするか
o 引数の型をObjectにするか、別の型にするか

これらを保留していますが、とりあえずできました。
プログラム上での指定を、Object型にして、
数値型は、そのまま数値リテラル、
その他の型は、toString()値の文字列リテラル、
という仕様になっています。I/Fは前者。

DBFlute-0.9.7.4-03-SNAPSHOT をご利用下さい。
ちょっとテストがかなり大変なので、色々動かして
もらえると助かります。

> 確かに、そうですね。
> ただ、個人的には、後者のほうが、実装後に何をやっているかは、
> 見てすぐわかるかなと思います。(1か月前の自分は自分じゃないんで…。)

引数の型を工夫して、両方が満たせる仕様を模索しています。
(多少、面倒な仕様でも、めったに使う機能じゃないから、
逆にシンプルよりも「やりやすい・あとでわかる」を優先した
方がいいですね)

2010/9/10 金子 雄一 <[E-MAIL ADDRESS DELETED]>:
> 金子です。
>
>> まあ、この機能存在に気付いてもらいやすいのは前者ですかね。
> 確かに、そうですね。
> ただ、個人的には、後者のほうが、実装後に何をやっているかは、
> 見てすぐわかるかなと思います。(1か月前の自分は自分じゃないんで…。)
> (でも、自分が作ったら、前者のI/F作っちゃうんだろうな、きっと。)
>
> Eclipseの補完と、このメソッドがコールバックが多いことまで考慮すると、
> 前者のほうが、若干、よいのかもしれませんね。
> なので、作りやすいほうでよいかと思います。
>
>
> 以上、よろしくお願いします。
>
> (2010/09/10 16:19), kubo wrote:
>>
>> 久保(jflute)です。
>>
>>>> coalesce って DBMS 共通かなぁ...!?
>>>
>>> SQL92の予約語(のはず)なので、DBMS共通と考えて、差支えないかと。
>>
>> ありがとうございます。
>> 軽く調べてみましたが大丈夫そうですね。少なくとも、
>> DerivedReferrer系では対応しようかと思います。
>> (日付型とか他の型はどうするかちょっと考えます)
>>
>> ユーザインターフェースは二通りのどちらかを考えています。
>> まあ、この機能存在に気付いてもらいやすいのは前者ですかね。
>> 現状、max() とか min() とかシンプル過ぎてEclipseで補完する
>> ときに一瞬ちょっと見づらいので(Objectクラスのメソッドに紛れる)、
>> オーバーロードでダブってた方が、選びやすいというのもあるかも。
>>
>> //
>> // (Specify)DerivedReferrer
>> //
>> cb.specify().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
>>     ...
>> }, null, 0); // オーバーロード
>>
>> cb.specify().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
>>     ...
>> }, null).coalesce(0); // 後付けメソッド
>>
>> //
>> // (Query)DerivedReferrer
>> //
>> cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
>>     ...
>> }).greaterEqual(expected, 0); // オーバーロード
>>
>> cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
>>     ...
>> }).greaterEqual(expected).coalesce(0); // 後付けメソッド
>>
>>
>> 2010/9/10 金子 雄一<[E-MAIL ADDRESS DELETED]>:
>>>
>>> 金子です。
>>>
>>>> 例えば、基点テーブルが FOO で BAR が子テーブルのとき、
>>>> BAR を持っていない FOO が検索結果から外れてしまうので、
>>>> max() の結果に対して、null の場合に 0 にする関数をラップしたい、
>>>> ということでよろしいでしょうか?
>>>
>>> まさに、その通りです。
>>>
>>>
>>>> coalesce って DBMS 共通かなぁ...!?
>>>
>>> SQL92の予約語(のはず)なので、DBMS共通と考えて、差支えないかと。
>>>
>>>
>>> 以上、よろしくお願いします。
>>>
>>>
>>> (2010/09/10 15:46), kubo wrote:
>>>>
>>>> 久保(jflute)です。
>>>>
>>>> ご確認ありがとうございます。
>>>>
>>>> 例えば、基点テーブルが FOO で BAR が子テーブルのとき、
>>>> BAR を持っていない FOO が検索結果から外れてしまうので、
>>>> max() の結果に対して、null の場合に 0 にする関数をラップしたい、
>>>> ということでよろしいでしょうか?
>>>>
>>>>  where FOO.FOO_COUNT>= (
>>>>          select max(BAR.BAR_COUNT)
>>>>            from BAR
>>>>           where BAR.FOO_ID = FOO.FOO_ID
>>>>        )
>>>>
>>>> ※売上データがFOO???参考までに当てはめて頂ければと
>>>>
>>>> 通常の (Specify)DerivedReferrer や ScalarSelect などでは、
>>>> それ自体が取得値なので、無い場合に null でもプログラム側で
>>>> なんとかすればいいのでそんなに問題にはなりませんが、
>>>> こうやってSQLの中で利用するときややこしい話になりますね。
>>>> そういう意味で、(Query)DerivedReferrer や ScalarCondition には
>>>> 共通するような話かもしれません。
>>>> もともとSQLの有名なハマりどころなので、
>>>> そういう意味でもしっかり対応したいとは思いますが、
>>>> coalesce って DBMS 共通かなぁ...!?
>>>> もう少々、色々と考えます。
>>>>
>>>> null のときに検索対象から外したい場合は、
>>>> null 演算で外れるよりも、別途(Query)DerivedReferrer などで
>>>> 明示的に絞り込んだ方が良いと思うので、null の場合は固定で
>>>> 0 でもいいかなとは思いますが、今の時点でそれはなかなか
>>>> できないので、オプションにする形を想像しています。
>>>>
>>>> #
>>>> # 例外処理を埋め込んだ DBFlute-0.9.7.4-02-SNAPSHOT を
>>>> # 公開しました。
>>>> #
>>>>
>>>> 2010/9/10 金子 雄一<[E-MAIL ADDRESS DELETED]>:
>>>>>
>>>>> 金子です。
>>>>>
>>>>> 一通り動かしてみましたが、
>>>>> 今のところ、予期した通りの動きです。
>>>>>
>>>>> が、肝心なことを忘れてました…。
>>>>> 子テーブルなので、必ずしも、レコードがあるわけでないのでした…。
>>>>>
>>>>> 業務的には、返品業務の実装をしています。
>>>>>
>>>>> で、現状、どの部分で、この機能を欲したかというと、
>>>>> 返品をする対象(つまり、売上データ)を検索検索する部分です。
>>>>>
>>>>> 基本的には、売上データを検索すればよいのですが、
>>>>> 全額返品している場合には、検索対象から外すという処理です。
>>>>>
>>>>> 返品そのものがない場合(たぶん、ほとんどが該当)は、
>>>>> 返品テーブルにデータがないので・・・・。
>>>>> という感じです。
>>>>>
>>>>> なので、CBの範疇かが、怪しいのですが、
>>>>> deriverの機能で、sum(),max(),min() 等ができるようになっていますが、
>>>>> ここに、coalesce関数をつける・つけないを選択できようには、ならないでしょ うか?
>>>>> ( coalesce(sum(ColB),0)とすれば、子テーブルのレコードがない場合は、0にな
>>>>> るので。ただし、そん座していない場合は、検索結果として取得できてはいけな
>>>>> い場合もあるかと思いますので、選択できればよいのかなと。coalesceの第2引
>>>>> 数をどう渡す?という問題もあるかと思いますので、実は、厳しいのかもしれま せんが・・・・。)
>>>>>
>>>>> CBの範疇や、DBFluteとしてのポリシーもあるかと思いますので、
>>>>> それを破らない範囲であれば、対応を検討していただけると、
>>>>> ありがたく思います。
>>>>>
>>>>>
>>>>> ご不明な点がありましたら、ご連絡ください。
>>>>> 以上、よろしくお願いいたします。
>>>>>
>>>>> (2010/09/10 6:21), kubo wrote:
>>>>>>
>>>>>> 久保(jflute)です。
>>>>>>
>>>>>> DBFlute-0.9.7.4-01-SNAPSHOTを使ってみて下さい。
>>>>>> (モジュール、ランタイム両方)
>>>>>>
>>>>>> まだ、各種例外処理が入っていないですが、
>>>>>> ColumnQueryの中で(Specify)DerivedReferrerが利用できます。
>>>>>> aliasName には固定で null を入れて下さい。
>>>>>>
>>>>>>> where
>>>>>>>  数字 = max(文字型カラム)
>>>>>>
>>>>>> これは、もともとの ColumnQuery でも、
>>>>>> コンパイルレベルでの抑制はできないので同じことかと。
>>>>>> 高度な機能に関しては、この辺は割り切りを入れています。
>>>>>> _______________________________________________
>>>>>> Seasar-user mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>
>>>>>
>>>>> --
>>>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>>>> 金子 雄一  Yuichi Kaneko
>>>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>>>> _______________________________________________
>>>>> Seasar-user mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>
>>>> _______________________________________________
>>>> Seasar-user mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>>>
>>> --
>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>> 株式会社プラスサム
>>> 金子 雄一  Yuichi Kaneko
>>> 〒330-0854
>>> 埼玉県さいたま市大宮区桜木町2-7-4
>>> プラスサムビル
>>> Tel: 048-650-9777 Fax: 048-650-9778
>>> E-mail : [E-MAIL ADDRESS DELETED]
>>> http://www.plus-sum.co.jp/
>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
> --
> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
> 金子 雄一  Yuichi Kaneko
> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内