[DAO-105] OracleのROWNUM疑似列を使ったPager実装を追加する Created: 2007-07-15  Updated: 2007-07-25  Resolved: 2007-07-25

Status: Resolved
Project: S2Dao
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0.45

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


 Description   

S2PagerをOracle上で利用する時にROWNUMによる絞り込みを出来るようにする。



 Comments   
Comment by jundu [ 2007-07-25 ]

ドキュメントを含めて、対応を完了しました。

Comment by jundu [ 2007-07-19 ]

Rev.949で対応しました。

結局、悩んでいたSQLの取得部分は、Statement#toStringがSQLを返すことが仕様として決まっているようにも見えなかったため、Standardの実装を変えました。ただ、インタフェースの変更は影響範囲が読めなかったため、引数には使いもしないStatementが残ったままになっています。

ドキュメントの修正は、後ほど対応します。

Comment by jundu [ 2007-07-15 ]

PagerResultSetFactoryLimitOffsetWrapperを参考に以下の修正を加えたいと思います。

・PagerResultSetFactoryLimitOffsetWrapperの実装の大半(makeLimitOffsetSqlとmakeCountSql以外)を抽象親クラスに移動する。
・作成した抽象親クラスからPagerResultSetFactoryRownumWrapperを新規追加。
・書き換え後のSQLは、以下のような感じ。

SELECT * FROM EMP
     ↓↓↓
SELECT * FROM (SELECT ROWNUM AS S2DAO_ROWNUMBER, S2DAO_ORIGINAL_DATA.* FROM (
SELECT * FROM EMP
) S2DAO_ORIGINAL_DATA) WHERE S2DAO_ROWNUMBER BETWEEN 1 AND 10

悩んでいるのは、素のSQLを取得する部分ですが、現状のStatement#toStringで取り出す方法がOracleで動かないため、SqlLogRegistryからの取得に切り替えるのですが、

・Oracle以外は動いていたのでOracleクラスだけ変えるか、Standardから変えてしまうか。
・Standardから変える場合、引数のStatementを使わないことに違和感を覚えるが。。。

今のところ、インタフェースは変更せず、Standardの実装をSqlLogRegistryを使う形に変更することを考えています。

Generated at Mon Dec 15 12:57:40 JST 2025 using Jira 10.6.1#10060001-sha1:a6461e220f274b29ced7ac9295492f2465fe5ef5.