summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/orm/unitofwork.py7
-rw-r--r--lib/sqlalchemy/orm/uowdumper.py8
-rw-r--r--lib/sqlalchemy/sql.py4
3 files changed, 13 insertions, 6 deletions
diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py
index 7fdcaeba2..7a12d554d 100644
--- a/lib/sqlalchemy/orm/unitofwork.py
+++ b/lib/sqlalchemy/orm/unitofwork.py
@@ -21,6 +21,7 @@ changes at once.
from sqlalchemy import util, logging, topological
from sqlalchemy.orm import attributes
+from sqlalchemy.orm import util as mapperutil
from sqlalchemy.orm.mapper import object_mapper, class_mapper
from sqlalchemy.exceptions import *
import StringIO
@@ -249,12 +250,18 @@ class UOWTransaction(object):
save/delete registration is entered for the object.
"""
+
#print "REGISTER", repr(obj), repr(getattr(obj, '_instance_key', None)), str(isdelete), str(listonly)
# if object is not in the overall session, do nothing
if not self.uow._is_valid(obj):
+ if logging.is_debug_enabled(self.logger):
+ self.logger.debug("object %s not part of session, not registering for flush" % (mapperutil.instance_str(obj)))
return
+ if logging.is_debug_enabled(self.logger):
+ self.logger.debug("register object for flush: %s isdelete=%s listonly=%s postupdate=%s" % (mapperutil.instance_str(obj), isdelete, listonly, postupdate))
+
mapper = object_mapper(obj)
self.mappers.add(mapper)
task = self.get_task_by_mapper(mapper)
diff --git a/lib/sqlalchemy/orm/uowdumper.py b/lib/sqlalchemy/orm/uowdumper.py
index 166e3b879..3e691f5a7 100644
--- a/lib/sqlalchemy/orm/uowdumper.py
+++ b/lib/sqlalchemy/orm/uowdumper.py
@@ -1,4 +1,5 @@
from sqlalchemy.orm import unitofwork
+from sqlalchemy.orm import util as mapperutil
"""Dumps out a string representation of a UOWTask structure"""
@@ -162,9 +163,9 @@ class UOWDumper(unitofwork.UOWExecutor):
objid = "(placeholder)"
else:
if attribute is not None:
- objid = "%s(%s).%s" % (te.obj.__class__.__name__, hex(id(te.obj)), attribute)
+ objid = "%s.%s" % (mapperutil.instance_str(te.obj), attribute)
else:
- objid = "%s(%s)" % (te.obj.__class__.__name__, hex(id(te.obj)))
+ objid = mapperutil.instance_str(te.obj)
if self.verbose:
return "%s (UOWTaskElement(%s, %s))" % (objid, hex(id(te)), (te.listonly and 'listonly' or (te.isdelete and 'delete' or 'save')))
elif process:
@@ -191,8 +192,5 @@ class UOWDumper(unitofwork.UOWExecutor):
else:
return '(none)'
- def _repr(self, obj):
- return "%s(%s)" % (obj.__class__.__name__, hex(id(obj)))
-
def _indent(self):
return " |" * self.indent
diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py
index edcf0f042..6924a60ce 100644
--- a/lib/sqlalchemy/sql.py
+++ b/lib/sqlalchemy/sql.py
@@ -1663,7 +1663,8 @@ class Join(FromClause):
self.isouter = isouter
name = property(lambda s: "Join object on " + s.left.name + " " + s.right.name)
-
+ encodedname = property(lambda s: s.name.encode('ascii', 'backslashreplace'))
+
def _locate_oid_column(self):
return self.left.oid_column
@@ -1791,6 +1792,7 @@ class Alias(FromClause):
alias = alias[0:15]
alias = alias + "_" + hex(random.randint(0, 65535))[2:]
self.name = alias
+ self.encodedname = alias.encode('ascii', 'backslashreplace')
self.case_sensitive = getattr(baseselectable, "case_sensitive", True)
def supports_execution(self):