prepare() method error

Поиск
Список
Период
Сортировка
От Michael Allman
Тема prepare() method error
Дата
Msg-id 20060212031201.V9299@yvyyl
обсуждение исходный текст
Ответы Re: prepare() method error
Список pgsql-jdbc
Hi all,

I've been testing the XA implementation and found a bug.  The
PGXAConnection prepare(Xid) method may return a value of XA_OK when it
should throw an XAException instead.  This can lead to an inconsistent TPC
outcome.

For example, if you attempt to insert a row which violates a uniqueness
constraint and then prepare the transaction branch, the prepare() method
returns XA_OK erroneously because the PREPARE TRANSACTION statement
executes without throwing an exception even though the transaction is not
prepared.

As a workaround, I've added a query after the PREPARE TRANSACTION query in
the prepare() method which searches the pg_prepared_xacts table for a row
with the given gid just "prepared".  If it doesn't find the corresponding
row, it throws an XAException with a suitable error code (I chose
XA_RBROLLBACK).

It would be cleaner if the driver could determine the success/failure of
the PREPARE TRANSACTION statement from the query itself.  For instance,
have the executeUpdate("PREPARE TRANSACTION " ....) return normally if and
only if it actually prepares a transaction.  If it doesn't prepare, throw
a meaningful SQLException.

Michael

В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Roman Chervotkin
Дата:
Сообщение: Re: PostgreSQL 8.1 and Sun Java Studio Creator2
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: prepare() method error