diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-08-11 01:08:42 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-08-11 01:08:42 +0000 |
| commit | 41c734b5a38a615c2f175659a6e8e0c37c482118 (patch) | |
| tree | 6d86610648085ffbe369117dc98245f13130d9d2 /lib/sqlalchemy/engine | |
| parent | 7a545a886973d76f934e0c234b69be8938cc9b20 (diff) | |
| download | sqlalchemy-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.py | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/default.py | 10 |
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)) |
