[CONTAINER-169] S2JDBC の SQL (ファイル含む) を使った問い合わせで,一つの SQL で通常の問い合わせと SEELCT COUNT(*) による件数の取得との両方を実行できるようにしました.[Seasar-user:12683] Created: 2008-01-30  Updated: 2008-02-08  Resolved: 2008-02-08

Status: Resolved
Project: S2Container
Component/s: S2JDBC
Affects Version/s: 2.4.22
Fix Version/s: 2.4.23

Type: Improvement Priority: Major
Reporter: koichik Assignee: koichik
Resolution: Fixed Votes: 0
Labels: None


 Description   

S2JDBC の SQL (ファイル含む) を使った問い合わせで,一つの SQL で通常の問い合わせと SEELCT COUNT による件数の取得との両方を実行できるようにする.[Seasar-user:12683]
http://ml.seasar.org/archives/seasar-user/2008-January/012683.html

このアイディアを拝借するかも.
http://d.hatena.ne.jp/jflute/20071219/1198041971

jdbcManager.selectBySqlFile("xxx.sql").getCount();

のようにすると,SQL ファイルの IF コメントで使えるパラメータを (S2JDBC が) 設定するとか.



 Comments   
Comment by koichik [ 2008-02-08 ]

API を変更してコミットしました.
http://svn.seasar.org/browse/?view=rev&root=s2container&revision=3487

long count = jdbcManager.selectBySql(Long.class, "select ~").getCount();

だったのを

long count = jdbcManager.getCountBySql("select ~");

にしました.

Comment by koichik [ 2008-02-08 ]

getCountBySql(), getCountBySqlFile() に変更するため再オープン.

Comment by higa [ 2008-02-02 ]

getCountBySql, getCountBySqlFileのほうがいいかも。
AutoSelectとの整合性ですが、明確な理由があれば
いいのではないでしょうか。

AutoSelectはいろいろオプションを指定する可能性があるけど、
SQL系はその必要がないので。

Comment by koichik [ 2008-02-02 ]

一応対応しました.
http://svn.seasar.org/browse/?view=rev&root=s2container&revision=3480

が,API は再考の余地ありかも.
現在は,

long count = jdbcManager
    .selectBySql(Long.class, "select ~")
    .getCount();

としているのだけど,getCount() の戻り値型は long 決め打ち (SQL 自動生成では戻り値型を指定しないため) なので,selectBySql() の第 1 引数に Long 以外を指定すると ClassCastException になります.
だったら,

long count = jdbcManager
    .getCountBySql("select ~");

とかの方がいいかも?
そうすると SQL 自動生成との整合性が...

Comment by koichik [ 2008-01-31 ]

IF コメント方式は S2JDBC でサポートしなくても利用者レベルで使えるので, S2JDBC では SQL を select count from (~) で囲んで実行することにしようかと.
それなら selectBySqlFile() だけでなく selectBySql() でも利用できるので.

Generated at Fri Mar 29 02:07:20 JST 2024 using Jira 9.13.0#9130001-sha1:94297e63fec900085df7b42441d17146fe025bb5.