in shard API, removed errant result.close()
left over from the 0.4 version. [ticket:1099]
[ticket:1228]
+
+ - made Session.merge cascades not trigger autoflush.
+ Fixes merged instances getting prematurely inserted
+ with missing values.
- sql
- Fixed the import weirdness in sqlalchemy.sql
# TODO: this should be an IdentityDict for instances, but will
# need a separate dict for PropertyLoader tuples
_recursive = {}
+ # Autoflush only on the topmost call
+ self._autoflush()
+
mapper = _object_mapper(instance)
if instance in _recursive:
return _recursive[instance]
self._update_impl(merged_state)
new_instance = True
else:
- merged = self.query(mapper.class_).get(key[1])
+ merged = self.query(mapper.class_).autoflush(False).get(key[1])
if merged is None:
merged = mapper.class_manager.new_instance()
sess.expunge(u)
sess.merge(u)
+ @testing.resolve_artifact_names
+ def test_cascades_dont_autoflush(self):
+ sess = create_session(autoflush=True)
+ m = mapper(User, users, properties={
+ 'addresses':relation(mapper(Address, addresses),backref='user')})
+ user = User(id=8, name='fred', addresses=[Address(email_address='user')])
+ merged_user = sess.merge(user)
+ assert merged_user in sess.new
+ sess.flush()
+ assert merged_user not in sess.new
+
if __name__ == "__main__":
testenv.main()