[Checkins] SVN: z3c.zalchemy/trunk/ Added support for optimistic savepoints.

Christian Theune ct at gocept.com
Fri Jun 29 05:56:28 EDT 2007


Log message for revision 77230:
  Added support for optimistic savepoints.
  

Changed:
  U   z3c.zalchemy/trunk/CHANGES.txt
  U   z3c.zalchemy/trunk/src/z3c/zalchemy/datamanager.py

-=-
Modified: z3c.zalchemy/trunk/CHANGES.txt
===================================================================
--- z3c.zalchemy/trunk/CHANGES.txt	2007-06-29 09:55:07 UTC (rev 77229)
+++ z3c.zalchemy/trunk/CHANGES.txt	2007-06-29 09:56:27 UTC (rev 77230)
@@ -5,6 +5,9 @@
 0.2 - unreleased
 ================
 
+  - Added support for optimistic savepoints. This can be used, similarly to
+    what happens with ZODB, to flush intermediary work without committing.
+
   - Provide a tighter integration with Zope's transaction mechanism. Sessions
     are now automatically associated with new objects. We rely on SQLAlchemy's
     SessionContext object which hands out a session for each thread. Your code

Modified: z3c.zalchemy/trunk/src/z3c/zalchemy/datamanager.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/datamanager.py	2007-06-29 09:55:07 UTC (rev 77229)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/datamanager.py	2007-06-29 09:56:27 UTC (rev 77230)
@@ -21,6 +21,7 @@
 from zope.schema.fieldproperty import FieldProperty
 
 from transaction.interfaces import IDataManager, ISynchronizer
+from transaction.interfaces import IDataManagerSavepoint
 
 from interfaces import IAlchemyEngineUtility
 
@@ -229,6 +230,10 @@
     def sortKey(self):
         return str(id(self))
 
+    def savepoint(self):
+        self.session.flush()
+        return AlchemySavepoint()
+
     def _cleanup(self):
         self.session.clear()
         del ctx.current
@@ -237,6 +242,18 @@
             util._resetEngine()
 
 
+class AlchemySavepoint(object):
+    """A savepoint for the AlchemyDataManager that only supports optimistic
+    savepoints.
+
+    """
+
+    implements(IDataManagerSavepoint)
+
+    def rollback(self):
+        raise Exception("Can't roll back zalchemy savepoints.")
+
+
 class MetaManager(object):
     """A manager for metadata to be able to use the same table name in
     different databases.



More information about the Checkins mailing list