[Seasar-user:13311] Re: 【JdbcManager】 Postgresで forUpdateNowait()が使えない
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2008年 3月 18日 (火) 09:45:11 JST
関修康です、お世話になっています。
> こちらで軽く調べた限りだと,PostgreSQL 8.1 から
> nowait がサポートされているようですね.
スミマセン、この発想が無かったです・・・。
> とはいえ,8.1 用,8.2 用,8.3 用...
> という調子で各バージョン毎に対応する Dialect を
> こちらで用意するのも大変というか無理があるので,
> PostgreSQL を利用している人から 8.1 用とか 8.2 用の
> Dialect を提供していただければ,それを S2JDBC に
> 含めますよ,というのが現実的かも.
8.1よりnowaitが実装されているようですね。
ただし、最新版の8.3でも wait N は未実装の様です。
私の方では以下の2メソッドを下記のように修正することで
一応期待通りの動作が出来ています。
なので出来ればこのパターンのDialectも標準として追加して頂きたいです。
@Override
public boolean supportsForUpdate(final SelectForUpdateType type,
boolean withTarget) {
return type != SelectForUpdateType.WAIT;
}
@Override
public String getForUpdateString(final SelectForUpdateType type,
final int waitSeconds, final Pair<String, String>... aliases) {
final StringBuilder buf = new StringBuilder(100).append(" for update");
if (aliases.length > 0) {
buf.append(" of ");
for (final Pair<String, String> alias : aliases) {
buf.append(alias.getFirst()).append(", ");
}
buf.setLength(buf.length() - 2);
}
switch (type) {
case NORMAL:
break;
case NOWAIT:
buf.append(" nowait");
break;
}
return new String(buf);
}
実装されるとしたら既存のDialectがPostgre80Dialectとなって、
このパターンがPostgreDialectとかなるイメージでしょうか
(発想が逆?新しい方が Postgre81Dialect?)
宜しくお願い致します。
Seasar-user メーリングリストの案内