summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/mapper.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2005-11-17 05:33:15 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2005-11-17 05:33:15 +0000
commit336ac3698000302f19670215cd9be7614893d1a9 (patch)
treee0cdb5b0b748f13d63ed785361032e51a4992dd1 /lib/sqlalchemy/mapper.py
parent6f4d8e7e0a74197db61f415b07952b884721e029 (diff)
downloadsqlalchemy-336ac3698000302f19670215cd9be7614893d1a9.tar.gz
Diffstat (limited to 'lib/sqlalchemy/mapper.py')
-rw-r--r--lib/sqlalchemy/mapper.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/sqlalchemy/mapper.py b/lib/sqlalchemy/mapper.py
index 6c5de9832..840ab0378 100644
--- a/lib/sqlalchemy/mapper.py
+++ b/lib/sqlalchemy/mapper.py
@@ -200,7 +200,8 @@ class Mapper(object):
if primary_keys is not None:
for k in primary_keys:
self.primary_keys.setdefault(k.table, []).append(k)
- self.primary_keys.setdefault(self.table, []).append(k)
+ if k.table != self.table:
+ self.primary_keys.setdefault(self.table, []).append(k)
else:
for t in self.tables + [self.table]:
try:
@@ -512,13 +513,15 @@ class Mapper(object):
continue
else:
delete.append(params)
- for col in table.primary_keys:
+ for col in self.primary_keys[table]:
params[col.key] = self._getattrbycolumn(obj, col)
uow.register_deleted_object(obj)
if len(delete):
clause = sql.and_()
for col in self.primary_keys[table]:
+ print "adding clause for primary key", table.name, "col", col.key
clause.clauses.append(col == sql.bindparam(col.key))
+ print "so heres the clause", str(clause)
statement = table.delete(clause)
c = statement.execute(*delete)
if c.rowcount != len(delete):
@@ -952,7 +955,12 @@ class PropertyLoader(MapperProperty):
uowcommit.register_object(child)
if self.direction != PropertyLoader.RIGHT or len(childlist.added_items()) == 0:
for child in childlist.deleted_items():
- self._synchronize(obj, child, None, True)
+ if not self.private:
+ # TODO: we arent sync'ing if this child object
+ # is to be deleted. this is because if its an "association"
+ # object, it needs its data in order to be located.
+ # need more explicit support for "association" objects.
+ self._synchronize(obj, child, None, True)
if self.direction == PropertyLoader.LEFT:
uowcommit.register_object(child, isdelete=self.private)
@@ -1124,7 +1132,8 @@ class EagerLoader(PropertyLoader):
h = objectstore.global_attributes.create_history(instance, self.key, self.uselist)
if not self.uselist:
- h.setattr(self.mapper._instance(row, imap))
+ if isnew:
+ h.setattr(self.mapper._instance(row, imap))
return
elif isnew:
result_list = h