mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-23 19:39:53 +08:00
Ecpg should support COMMIT PREPARED and ROLLBACK PREPARED.
The problem was that "begin transaction" was issued automatically before executing COMMIT/ROLLBACK PREPARED if not in auto commit. This fix by Masahiko Sawada fixes this.
This commit is contained in:
parent
d0e5ac736d
commit
a8b3262ab9
@ -213,9 +213,15 @@ ECPGtrans(int lineno, const char *connection_name, const char *transaction)
|
||||
* If we got a transaction command but have no open transaction, we
|
||||
* have to start one, unless we are in autocommit, where the
|
||||
* developers have to take care themselves. However, if the command is
|
||||
* a begin statement, we just execute it once.
|
||||
* a begin statement, we just execute it once. And if the command is
|
||||
* commit or rollback prepared, we don't execute it.
|
||||
*/
|
||||
if (PQtransactionStatus(con->connection) == PQTRANS_IDLE && !con->autocommit && strncmp(transaction, "begin", 5) != 0 && strncmp(transaction, "start", 5) != 0)
|
||||
if (PQtransactionStatus(con->connection) == PQTRANS_IDLE &&
|
||||
!con->autocommit &&
|
||||
strncmp(transaction, "begin", 5) != 0 &&
|
||||
strncmp(transaction, "start", 5) != 0 &&
|
||||
strncmp(transaction, "commit prepared", 15) != 0 &&
|
||||
strncmp(transaction, "rollback prepared", 17) != 0)
|
||||
{
|
||||
res = PQexec(con->connection, "begin transaction");
|
||||
if (!ecpg_check_PQresult(res, lineno, con->connection, ECPG_COMPAT_PGSQL))
|
||||
|
Loading…
Reference in New Issue
Block a user