summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases/mssql.py
diff options
context:
space:
mode:
authorMichael Trier <mtrier@gmail.com>2009-04-28 03:35:35 +0000
committerMichael Trier <mtrier@gmail.com>2009-04-28 03:35:35 +0000
commit541a0c8491bf3a966741adf8cdb524e4aab72e1b (patch)
tree87598e45ab248c4416f0e5d3b3b2e19335db04a7 /lib/sqlalchemy/databases/mssql.py
parent85f754751412fd48f915e7c3062689401a3723b8 (diff)
downloadsqlalchemy-541a0c8491bf3a966741adf8cdb524e4aab72e1b.tar.gz
Modified savepoint logic in mssql to ensure that it does not step on non-savepoint oriented routines. Savepoint support is still very experimental.
Diffstat (limited to 'lib/sqlalchemy/databases/mssql.py')
-rw-r--r--lib/sqlalchemy/databases/mssql.py12
1 files changed, 4 insertions, 8 deletions
diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py
index 0442ddfca..ce39df94c 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)