-
Julien Muchembled authored
When switching all storages to the new API in the master branch, I found a few issues, mainly with blobs. 1. Created/modified blobs are invalidated during the first phase (in Connection._store_objects): obj._p_invalidate() And with the old API, _handle_serial then sets _p_serial Ghost objects are not supposed to have a _p_serial and with the new API, a few tests would fail because _p_serial are checked without activating the blob first. 2. Another consequence of _handle_serial not updating _p_changed/_p_serial immediately is that created objects are stored twice if __getstate__ modifies itself. This case is tested in testConnection by doctest_lp485456_setattr_in_setstate_doesnt_cause_multiple_stores Hence the change in Connection._commit: - self._modified is already appended in Connection._store_objects - (obj._p_serial == z64) instead of (oid in self._creating) would not work for savepoints. 3. Setting _p_changed of a Blob with no uncommitted changes would cause an error (lp440234_Setting__p_changed_of_a_Blob_w_no_uncomitted_changes_is_noop) Fixed by the same change as in 2: - oid was appended twice to self._modified but reverted one (self._modified.pop() in _store_objects) - the test passed because _p_changed was reset early by _handle_serial
572a9652