diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-10-30 18:04:00 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-10-30 18:04:00 +0000 |
| commit | 206c0b9792b02a0d77d92e679952cb2d0465cede (patch) | |
| tree | 9927d4f396f1f3d99982ef9e2dab40753f74d970 /lib/sqlalchemy/orm/unitofwork.py | |
| parent | adcf8ea00dda6d8e62fceeab36d90eabe36b5f91 (diff) | |
| download | sqlalchemy-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.py | 13 |
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 |
