2008年3月17日月曜日

S2JDBCのgetCountBySqlFileでエラー(MySQL)

スズキです。

S2JDBC試してます。
期待している機能の一つであるgetCountBySqlFileを
MySQLにて試したところ、

select count(*) from (
  SELECT * FROM HOGE
)

といったSQLが実行され、
(SQLファイルの内容は"SELECT * FROM HOGE")
下記のようなエラーが出力されました。
Every derived table must have its own alias

実際、上記のSQLを直接実行したところ、
同様のエラーが発生し、問題はSQLにあるようです。

エラーより、推測できるのですが、下記なSQLなら、
問題ないようです。(副問い合わせに"Alias:TMP"を付与)

select count(*) from (
  SELECT * FROM HOGE
) as TMP

困ったなーと思い、とりあえずtrunkのソースを見てると、
http://svn.seasar.org/browse/trunk/s2-tiger/src/main/java/org/seasar/extension/jdbc/dialect/StandardDialect.java?revision=3521&root=s2container&view=markup
該当部分は下記のようになっており、
エイリアス(COUNT_)付いてるなー、と思いつつ、

public String convertGetCountSql(String sql) {
  return "select count(*) from ( " + sql + " ) COUNT_";
}

実際に利用している2.4.23の該当部分を確認すると、

public String convertGetCountSql(String sql) {
  return "select count(*) from ( " + sql + " )";
}

案の定、エイリアスは付いていませんでした。

ということで、下記にある2.4.24のスナップショットを使うことで、
http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-framework/2.4.24-SNAPSHOT/
現状は回避することにしました。

S2JDBCのソースを少し読んでしまった...

--

http://suz-lab.blogspot.com/

0 コメント: