summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-01-24 19:01:11 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2010-01-24 19:01:11 +0000
commitf20102829e4280cd9c35d40e32e22729ef520b0d (patch)
tree837308f25d7e83b2340f890535d12ed393814e27
parentdd01f817b738a81bf9e5e4632387454f0f177dd6 (diff)
downloadsqlalchemy-f20102829e4280cd9c35d40e32e22729ef520b0d.tar.gz
- move "should_autocommit" to a deferred method. connection wont call it if a transaction is in progress.
-rw-r--r--lib/sqlalchemy/engine/base.py5
-rw-r--r--lib/sqlalchemy/engine/default.py23
2 files changed, 18 insertions, 10 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py
index 26d1b69d9..e74e00d84 100644
--- a/lib/sqlalchemy/engine/base.py
+++ b/lib/sqlalchemy/engine/base.py
@@ -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()
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py
index 4b2e3b681..bb3688597 100644
--- a/lib/sqlalchemy/engine/default.py
+++ b/lib/sqlalchemy/engine/default.py
@@ -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 \