[Checkins] SVN: zope.sqlalchemy/branches/dummy-savepoint/src/zope/sqlalchemy/datamanager.py - removed NO_SAVEPOINT_SUPPORT

Andreas Jung andreas at andreas-jung.com
Sun Jan 4 08:18:32 EST 2009


Log message for revision 94499:
  - removed NO_SAVEPOINT_SUPPORT
  - using an explicit whitelist for databases with savepoint support
  
  

Changed:
  U   zope.sqlalchemy/branches/dummy-savepoint/src/zope/sqlalchemy/datamanager.py

-=-
Modified: zope.sqlalchemy/branches/dummy-savepoint/src/zope/sqlalchemy/datamanager.py
===================================================================
--- zope.sqlalchemy/branches/dummy-savepoint/src/zope/sqlalchemy/datamanager.py	2009-01-04 07:44:36 UTC (rev 94498)
+++ zope.sqlalchemy/branches/dummy-savepoint/src/zope/sqlalchemy/datamanager.py	2009-01-04 13:18:31 UTC (rev 94499)
@@ -25,13 +25,11 @@
 STATUS_READONLY = 'readonly' # session joined to transaction, no writes allowed.
 STATUS_INVALIDATED = STATUS_CHANGED # BBB
 
-NO_SAVEPOINT_SUPPORT = set(['sqlite'])
-
 # For driver names listed here and a server version info
 # below the given minimum version: return a dummy savepoint
 # implementation
-SAVEPOINT_SUPPORT_MIN_VERSIONS = dict(
-postgres=(8,0,0),
+RDBMS_WITH_SAVEPOINT_SUPPORT= dict(
+    postgres=(8,0,0),
 )
 
 _SESSION_STATE = {} # a mapping of id(session) -> status
@@ -101,28 +99,22 @@
         """Savepoints are only supported when all connections support
            subtransactions
         """
+
         engines = set(engine.url.drivername
                   for engine in self.session.transaction._connections.keys()
                   if isinstance(engine, Engine))
 
-        # Return a dummy savepoint implementation for listed driver 
-        # names and older version number
-
         # ATT: is this always true?
         assert len(engines) == 1, 'len(engines) != 1' 
-
         engine = engines[0]
-        min_version = SAVEPOINT_SUPPORT_MIN_VERSIONS.get(engine.url.drivername,
-                                                         None)
+        min_version = RDBMS_WITH_SAVEPOINT_SUPPORT.get(engine.url.drivername,
+                                                       None)
         if min_version is not None:
             # server_version_info() return the server version number as tuple
-            if engine.dialect.server_version_info() < min_version:
-                return DummySavePoint(self.session)
+            if engine.dialect.server_version_info() > min_version:
+                return self._savepoint
+        return DummySavePoint(self.session)
 
-        if engines.intersection(NO_SAVEPOINT_SUPPORT):
-            raise AttributeError('savepoint')
-        return self._savepoint
-
     def _savepoint(self):
         return SessionSavepoint(self.session)
 



More information about the Checkins mailing list