[Seasar-user:16544] [S2Pager(S2Dao)]細かい要望2点

佐竹雅央 [E-MAIL ADDRESS DELETED]
2008年 12月 24日 (水) 05:52:52 JST


お世話になっております、佐竹と申します。
S2Dao 1.0.49 使わせて頂いております。

S2Pager 関連のクラスで2点、検討いただきたいことがあります。

1点目、count のためのSQLで、
パフォーマンスのために order by 句を取り除く際の正規表現について、
AbstractPagingSqlRewriter
> "order\\s+by\\s+([\\w\\p{L}.`\\[\\]]+(\\s+(asc|desc))?\\s*)(,\\s*[\\w\\p{L}.`\\[\\]]+(\\s+(asc|desc))?)*\\s*$"
となっているところ、
> "order\\s+by\\s+([\\w\\p{L}.`\\[\\]]+(\\s+(asc|desc))?\\s*)(,\\s*[\\w\\p{L}.`\\[\\]]+(\\s+(asc|desc))?\\s*)*$"
にして頂けないかなぁと。
でないと、order by 句が3つ以上のカラムからなる場合に中間部での空白の入り方がシビアになってしまいます。(2個目以降のカンマの前に空白や改行が許されない)
ホント言うと、order by句に関数使ってる人とか居るので、いっそ「ここはOrderByだからカウントん時は要らないんです」なマークアップが書けると一番良いんですが。

2点目、OracleのRownumを使ったPaging用SQLを作る部分、
OracleRownumPagingSqlRewriter
> SELECT * FROM (SELECT ROWNUM AS S2DAO_ROWNUMBER, S2DAO_ORIGINAL_DATA.* FROM 〜
となっているところを、
> SELECT * FROM (SELECT S2DAO_ORIGINAL_DATA.*, ROWNUM AS S2DAO_ROWNUMBER FROM 〜
のように、ROWNUM を後ろにしていただけないかなぁと。

これは、イレギュラーな使い方なのですが、
SELECT句を単項目で定義したSQLのDaoメソッドの戻り値を int など非Beanクラスとしたとき、
Pager機能を使わない場合はその値が取得できるのですが、Pager機能が発動する(引数がPagerCondition)と、Oracleの場合だけはROWNUM
が返ってしまうという。

//Daoのメソッド定義のイメージ↓
@Sql("select xxx_id from xxx_tbl")
int selectOneValue()

本来の使い方じゃないとは思っているのですが、そういう使い方があってもいいな・・・と。
(SELECT結果が単一行じゃないと動かないようなのですが、これもintの配列やIntegerのリストで取り出せるともっとうれしい・・・ってそれはS2PagerではなくS2Daoへの要望になりますが・・・まだよく確認していないので。。。)


以上、乱文失礼いたしました。


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