ECPG ignores SAVEPOINT if first statement of a transaction - Mailing list pgsql-hackers

From Michael Fuhr
Subject ECPG ignores SAVEPOINT if first statement of a transaction
Date
Msg-id 20050803153223.GA17861@winnie.fuhr.org
Whole thread Raw
List pgsql-hackers
ECPG ignores SAVEPOINT if it's the first statement of a transaction:

% cat foo.pgc
int
main(void)
{   EXEC SQL WHENEVER SQLERROR SQLPRINT;   EXEC SQL WHENEVER SQLWARNING SQLPRINT;
   EXEC SQL CONNECT TO test;
   EXEC SQL SAVEPOINT foo;   EXEC SQL DROP TABLE nosuch_1;   EXEC SQL ROLLBACK TO foo;   EXEC SQL DROP TABLE nosuch_2;
   EXEC SQL COMMIT;   EXEC SQL DISCONNECT;
   return 0;
}

% ./foo
sql error 'table "nosuch_1" does not exist' in line 10.
sql error 'current transaction is aborted, commands ignored until end of transa

The SAVEPOINT code is generated but apparently ECPGtrans() doesn't
execute it.  A sniff of the connection doesn't show it, and the
sniff shows the ROLLBACK TO failing with "no such savepoint."

If I execute a command before the SAVEPOINT then I get the following,
which is what I was expecting:

% ./foo
sql error 'table "nosuch_1" does not exist' in line 11.
sql error 'table "nosuch_2" does not exist' in line 13.

A sniff of this connection shows both the SAVEPOINT and ROLLBACK TO
being executed and succeeding.

-- 
Michael Fuhr
http://www.fuhr.org/~mfuhr/


pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: openbsd, plpython, missing threading symbols
Next
From: Tom Lane
Date:
Subject: Re: openbsd, plpython, missing threading symbols