summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-08-11 01:08:42 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-08-11 01:08:42 +0000
commit41c734b5a38a615c2f175659a6e8e0c37c482118 (patch)
tree6d86610648085ffbe369117dc98245f13130d9d2 /lib/sqlalchemy/engine
parent7a545a886973d76f934e0c234b69be8938cc9b20 (diff)
downloadsqlalchemy-41c734b5a38a615c2f175659a6e8e0c37c482118.tar.gz
attempting to get oracle XID to work. not there yet.
Diffstat (limited to 'lib/sqlalchemy/engine')
-rw-r--r--lib/sqlalchemy/engine/base.py10
-rw-r--r--lib/sqlalchemy/engine/default.py10
2 files changed, 18 insertions, 2 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py
index 4e4edaced..9f8e8734e 100644
--- a/lib/sqlalchemy/engine/base.py
+++ b/lib/sqlalchemy/engine/base.py
@@ -203,6 +203,14 @@ class Dialect(object):
raise NotImplementedError()
+ def create_xid(self):
+ """create a two-phase transaction ID.
+
+ this id will be passed to do_begin_twophase(), do_rollback_twophase(),
+ do_commit_twophase(). its format is unspecified."""
+
+ raise NotImplementedError()
+
def do_commit(self, connection):
"""Provide an implementation of *connection.commit()*, given a DBAPI connection."""
@@ -606,7 +614,7 @@ class Connection(Connectable):
if self.__transaction is not None:
raise exceptions.InvalidRequestError("Cannot start a two phase transaction when a transaction is already started.")
if xid is None:
- xid = "_sa_%032x" % random.randint(0,2**128)
+ xid = self.__engine.dialect.create_xid();
self.__transaction = TwoPhaseTransaction(self, xid)
return self.__transaction
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py
index 185387177..db22b8aaa 100644
--- a/lib/sqlalchemy/engine/default.py
+++ b/lib/sqlalchemy/engine/default.py
@@ -7,7 +7,7 @@
"""Provide default implementations of per-dialect sqlalchemy.engine classes"""
from sqlalchemy import schema, exceptions, sql, types, util
-import sys, re
+import sys, re, random
from sqlalchemy.engine import base
@@ -87,6 +87,14 @@ class DefaultDialect(base.Dialect):
#print "ENGINE COMMIT ON ", connection.connection
connection.commit()
+
+ def create_xid(self):
+ """create a two-phase transaction ID.
+
+ this id will be passed to do_begin_twophase(), do_rollback_twophase(),
+ do_commit_twophase(). its format is unspecified."""
+
+ return "_sa_%032x" % random.randint(0,2**128)
def do_savepoint(self, connection, name):
connection.execute(sql.SavepointClause(name))