summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/unitofwork.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-10-30 18:04:00 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-10-30 18:04:00 +0000
commit206c0b9792b02a0d77d92e679952cb2d0465cede (patch)
tree9927d4f396f1f3d99982ef9e2dab40753f74d970 /lib/sqlalchemy/orm/unitofwork.py
parentadcf8ea00dda6d8e62fceeab36d90eabe36b5f91 (diff)
downloadsqlalchemy-206c0b9792b02a0d77d92e679952cb2d0465cede.tar.gz
- fix to "row switch" behavior, i.e. when an INSERT/DELETE is combined into a
single UPDATE; many-to-many relations on the parent object update properly. [ticket:841] - it's an error to session.save() an object which is already persistent [ticket:840] - changed a bunch of repr(obj) calls in session.py exceptions to use mapperutil.instance_str()
Diffstat (limited to 'lib/sqlalchemy/orm/unitofwork.py')
-rw-r--r--lib/sqlalchemy/orm/unitofwork.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py
index 7a443b331..43f0d46d9 100644
--- a/lib/sqlalchemy/orm/unitofwork.py
+++ b/lib/sqlalchemy/orm/unitofwork.py
@@ -304,6 +304,17 @@ class UOWTransaction(object):
task.append(obj, listonly, isdelete=isdelete, **kwargs)
+ def set_row_switch(self, obj):
+ """mark a deleted object as a 'row switch'.
+
+ this indicates that an INSERT statement elsewhere corresponds to this DELETE;
+ the INSERT is converted to an UPDATE and the DELETE does not occur.
+ """
+ mapper = object_mapper(obj)
+ task = self.get_task_by_mapper(mapper)
+ taskelement = task._objects[obj]
+ taskelement.isdelete = "rowswitch"
+
def unregister_object(self, obj):
"""remove an object from its parent UOWTask.
@@ -902,7 +913,7 @@ class UOWTaskElement(object):
self.childtasks = []
self.__isdelete = False
self.__preprocessed = {}
-
+
def _get_listonly(self):
return self.__listonly