Hi,
Following a request[1] for savepoint release support in
zope.sqlalchemy, I've been looking into how this might be done. Adding
the necessary support to Zope's transaction module was quite simple
[2], but the mapping of Zope transaction savepoints -> SQLAlchemy
nested transactions -> database savepoints gives a problem...
How can I get SQLAlchemy to release a savepoint, without also
releasing all subsequent savepoints (the nested transactions? This is
demonstrated by the doctest below from my branch of Zope's transaction
module:
Savepoint release
-----------------
Some data managers may only support a limited number of savepoints.
>>> dm['bob-balance'] = 100.0
>>> dm['bob-balance']
100.0
>>> savepoint1 = transaction.savepoint()
>>> dm['bob-balance'] = 200.0
>>> dm['bob-balance']
200.0
>>> savepoint2 = transaction.savepoint()
>>> dm['bob-balance'] = 300.0
>>> dm['bob-balance']
300.0
>>> savepoint3 = transaction.savepoint()
To release resources on the data manager, a savepoint may be released:
>>> savepoint2.release()
The savepoint then becomes invalid and may no longer be used:
>>> savepoint2.rollback()
Traceback (most recent call last):
...
InvalidSavepointError
Subsequent savepoints remain valid:
>>> dm['bob-balance'] = 400.0
>>> dm['bob-balance']
400.0
>>> savepoint3.rollback()
>>> dm['bob-balance']
300.0
As do previous savepoints:
>>> savepoint1.rollback()
>>> dm['bob-balance']
100.0
>>> transaction.abort()
Laurence
[1]
http://groups.google.com/group/sqlalchemy/browse_thread/thread/b2594ff621538f3f
[2] http://svn.zope.org/repos/main/transaction/branches/elro-savepoint-release
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.