]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- move "should_autocommit" to a deferred method. connection wont call it if a trans...
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 24 Jan 2010 19:01:11 +0000 (19:01 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 24 Jan 2010 19:01:11 +0000 (19:01 +0000)
lib/sqlalchemy/engine/base.py
lib/sqlalchemy/engine/default.py

index 26d1b69d92259d0fdf8568f36d415c8ac0c121b4..e74e00d84c0ad1e4c8e057f5ea355b80e0abd9bb 100644 (file)
@@ -729,7 +729,6 @@ class Connection(Connectable):
         :class:`~sqlalchemy.engine.Engine`, see the ``connect()`` and
         ``contextual_connect()`` methods of Engine.
         """
-
         self.engine = engine
         self.__connection = connection or engine.raw_connection()
         self.__transaction = None
@@ -1133,8 +1132,8 @@ class Connection(Connectable):
             
             if context.isinsert and not context.executemany:
                 context.post_insert()
-            
-        if context.should_autocommit and not self.in_transaction():
+        
+        if self.__transaction is None and context.should_autocommit:
             self._commit_impl()
             
         return context.get_result_proxy()._autoclose()
index 4b2e3b6818252c7aafde418089756b710e2befe3..bb3688597aea1a70e6e085b060d507fc7cb75431 100644 (file)
@@ -238,7 +238,6 @@ class DefaultExecutionContext(base.ExecutionContext):
             else:
                 self.statement = unicode(compiled)
             self.isinsert = self.isupdate = self.isdelete = self.executemany = False
-            self.should_autocommit = True
             self.result_map = None
             self.cursor = self.create_cursor()
             self.compiled_parameters = []
@@ -269,10 +268,7 @@ class DefaultExecutionContext(base.ExecutionContext):
             self.isinsert = compiled.isinsert
             self.isupdate = compiled.isupdate
             self.isdelete = compiled.isdelete
-            self.should_autocommit = compiled.statement._autocommit
             self.execution_options = compiled.statement._execution_options
-            if self.should_autocommit is expression.PARSE_AUTOCOMMIT:
-                self.should_autocommit = self.should_autocommit_text(self.statement)
 
             if not parameters:
                 self.compiled_parameters = [compiled.construct_params()]
@@ -295,14 +291,27 @@ class DefaultExecutionContext(base.ExecutionContext):
             else:
                 self.statement = statement
             self.isinsert = self.isupdate = self.isdelete = False
-            self.should_autocommit = self.should_autocommit_text(statement)
             self.cursor = self.create_cursor()
         else:
             # no statement. used for standalone ColumnDefault execution.
             self.statement = self.compiled = None
-            self.isinsert = self.isupdate = self.isdelete = self.executemany = self.should_autocommit = False
+            self.isinsert = self.isupdate = self.isdelete = self.executemany = False
             self.cursor = self.create_cursor()
-    
+
+    @util.memoized_property
+    def should_autocommit(self):
+        
+        if self.compiled:
+            autocommit = self.compiled.statement._autocommit
+            if autocommit is expression.PARSE_AUTOCOMMIT:
+                return self.should_autocommit_text(self.statement)
+            else:
+                return autocommit
+        elif self.statement:
+            return self.should_autocommit_text(self.statement)
+        else:
+            return False
+            
     @util.memoized_property
     def _is_explicit_returning(self):
         return self.compiled and \