When you "rollback to something;" any work since that savepoint was created is
un-done, but that named savepoint still exists, yes.
That caught me out once where my code was like
for each line in the file:
savepoint foo
do several inserts/updates
if they all went ok:
release foo
if not:
rollback to foo
stuff involved with error
I wound up slowly accumulating a ton of savepoints with the same name as each
time there was an error it left another savepoint on the stack. It should have
been more like
for each line in the file:
savepoint foo
do several inserts/updates
if something went wrong:
rollback to foo
stuff involved with error
release foo whether it went right or wrong
On a humor tangent, am I the only person who has ever named a savepoint
"theHounds" for the sole purpose of being able to run the statement:
release theHounds;
? :)
-----Original Message-----
From: sqlite-users [mailto:[email protected]] On
Behalf Of Andy Bennett
Sent: Wednesday, February 13, 2019 9:58 AM
To: SQLite mailing list
Subject: Re: [sqlite] Am I understanding how to use ROLLBACK - SAVEPOINT
correctly?
Hi,
> For example, would I do this:
> Connect to the DB
> [ Pass the command to save: ] SAVEPOINT 'current'
> [ User choices are processed: SELECT and UPDATE statements ]
> [ if error or user changes their mind ] ROLLBACK TRANSACTION TO
> SAVEPOINT 'current'
>
> [ otherwise... upon success ] RELEASE SAVEPOINT 'current'
That looks pretty good. I think you also need to RELEASE the SAVEPOINT
after you've ROLLed BACK to it (if you no longer want it) otherwise it
stays on the stack so that you can ROLLBACK to it again.
I have also recently implemented something using SAVEPOINT TRANSACTIONS
and I'm unclear (having read the docs) what state one can expect
statements to be in after a ROLLBACK. One of the mental models says that
it's as if the transaction was restarted from the beginning, up until
the SAVEPOINT. However, I assume that SELECT statements stay put,
returning the next row after the one that was last fetched rather the
one that was fetched immediately after the first time that the SAVEPOINT
was passed.
Does anyone know what the guarantees are?
[email protected]
http://www.ashurst.eu.org/
http://www.gonumber.com/andyjpb
0x7EBA75FF
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users