From: Mike Bayer Date: Sun, 24 Jan 2010 19:01:11 +0000 (+0000) Subject: - move "should_autocommit" to a deferred method. connection wont call it if a trans... X-Git-Tag: rel_0_6beta1~34 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f20102829e4280cd9c35d40e32e22729ef520b0d;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - move "should_autocommit" to a deferred method. connection wont call it if a transaction is in progress. --- diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 26d1b69d92..e74e00d84c 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 4b2e3b6818..bb3688597a 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 \