• Type: Improvement
    • Resolution: Fixed
    • Priority: Major
    • 2.4.23
    • Affects Version/s: 2.4.22
    • Component/s: S2JDBC
    • None

      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 が) 設定するとか.

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

          koichik added a comment -

          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 ~");
          

          にしました.

          koichik added a comment - 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 ~" ); にしました.

          koichik added a comment -

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

          koichik added a comment - getCountBySql(), getCountBySqlFile() に変更するため再オープン.

          higa added a comment -

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

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

          higa added a comment - getCountBySql, getCountBySqlFileのほうがいいかも。 AutoSelectとの整合性ですが、明確な理由があれば いいのではないでしょうか。 AutoSelectはいろいろオプションを指定する可能性があるけど、 SQL系はその必要がないので。

          koichik added a comment -

          一応対応しました.
          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 自動生成との整合性が...

          koichik added a comment - 一応対応しました. 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 自動生成との整合性が...

          koichik added a comment -

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

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

            Assignee:
            koichik
            Reporter:
            koichik
            Votes:
            0 Vote for this issue
            Watchers:
            Start watching this issue

              Created:
              Updated:
              Resolved: