From: Michael Trier Date: Tue, 28 Apr 2009 03:35:35 +0000 (+0000) Subject: Modified savepoint logic in mssql to ensure that it does not step on non-savepoint... X-Git-Tag: rel_0_5_4~15 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=541a0c8491bf3a966741adf8cdb524e4aab72e1b;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Modified savepoint logic in mssql to ensure that it does not step on non-savepoint oriented routines. Savepoint support is still very experimental. --- diff --git a/CHANGES b/CHANGES index 22d4c98434..c3dc89916f 100644 --- a/CHANGES +++ b/CHANGES @@ -69,6 +69,10 @@ CHANGES construct (i.e. declarative columns). [ticket:1353] - mssql + - Modified how savepoint logic works to prevent it from + stepping on non-savepoint oriented routines. Savepoint + support is still very experimental. + - Added in reserved words for MSSQL that covers version 2008 and all prior versions. [ticket:1310] diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py index 0442ddfcaf..ce39df94c7 100644 --- a/lib/sqlalchemy/databases/mssql.py +++ b/lib/sqlalchemy/databases/mssql.py @@ -1147,10 +1147,10 @@ class MSSQLDialect(default.DefaultDialect): newobj.dialect = self return newobj - def do_begin(self, connection): - cursor = connection.cursor() - cursor.execute("SET IMPLICIT_TRANSACTIONS OFF") - cursor.execute("BEGIN TRANSACTION") + def do_savepoint(self, connection, name): + util.warn("Savepoint support in mssql is experimental and may lead to data loss.") + connection.execute("IF @@TRANCOUNT = 0 BEGIN TRANSACTION") + connection.execute("SAVE TRANSACTION %s" % name) def do_release_savepoint(self, connection, name): pass @@ -1627,10 +1627,6 @@ class MSSQLCompiler(compiler.DefaultCompiler): field = self.extract_map.get(extract.field, extract.field) return 'DATEPART("%s", %s)' % (field, self.process(extract.expr)) - def visit_savepoint(self, savepoint_stmt): - util.warn("Savepoint support in mssql is experimental and may lead to data loss.") - return "SAVE TRANSACTION %s" % self.preparer.format_savepoint(savepoint_stmt) - def visit_rollback_to_savepoint(self, savepoint_stmt): return "ROLLBACK TRANSACTION %s" % self.preparer.format_savepoint(savepoint_stmt)