[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 メーリングリストの案内