Skip to content

Commit d1325b0

Browse files
committed
update the child ordering to be incremental
1 parent e67fbd0 commit d1325b0

4 files changed

Lines changed: 9 additions & 8 deletions

File tree

morango/sync/operations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ def _update_legacy_self_ref_order_for_model(queryset):
698698
parent_order = parent.values("_self_ref_order")[:1]
699699
pending = queryset.exclude(_self_ref_fk="").filter(_self_ref_order=None)
700700

701-
while pending.filter(Exists(parent)).update(_self_ref_order=Subquery(parent_order)):
701+
while pending.filter(Exists(parent)).update(_self_ref_order=Subquery(parent_order) + 1):
702702
pass
703703

704704

morango/sync/stream/serialize.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,15 +219,16 @@ def _compute_self_ref_order(self_ref_fk_value):
219219
Compute ``_self_ref_order`` for a self-referential store record.
220220
221221
Returns ``0`` when the record has no parent (root), otherwise queries
222-
the parent ``Store`` row and returns its ``_self_ref_order`` value.
222+
the parent ``Store`` row and returns the next order value.
223223
"""
224224
if not self_ref_fk_value:
225225
return 0
226-
return (
226+
parent_order = (
227227
Store.objects.filter(id=self_ref_fk_value)
228228
.values_list("_self_ref_order", flat=True)
229229
.first()
230230
)
231+
return parent_order + 1 if parent_order is not None else None
231232

232233

233234
class ModelPartitionBuffer(Buffer[List[SerializeTask]]):

tests/testapp/tests/sync/stream/test_serialize.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ def test_handle_store_create__self_ref_with_parent(self, _mock_srf):
293293
self.update._handle_store_create(task)
294294

295295
self.assertEqual(task.store._self_ref_fk, parent_store.id)
296-
self.assertEqual(task.store._self_ref_order, 3)
296+
self.assertEqual(task.store._self_ref_order, 4)
297297

298298
@mock.patch("morango.sync.stream.serialize.self_referential_fk", return_value="parent_id")
299299
def test_handle_store_create__self_ref_parent_not_in_store(self, _mock_srf):
@@ -325,7 +325,7 @@ def test_handle_store_update__self_ref_fk_changed(self, _mock_srf):
325325
self.update._handle_store_update(task)
326326

327327
self.assertEqual(task.store._self_ref_fk, new_parent_store.id)
328-
self.assertEqual(task.store._self_ref_order, 7)
328+
self.assertEqual(task.store._self_ref_order, 8)
329329

330330

331331
class ModelPartitionBufferTestCase(SimpleTestCase):

tests/testapp/tests/sync/test_operations.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,7 +1023,7 @@ def test_dequeue_into_store__self_ref_order_fallback_for_missing_capability(self
10231023
)
10241024

10251025
self.assertEqual(Store.objects.get(id=self.data["model3"])._self_ref_order, 0)
1026-
self.assertEqual(Store.objects.get(id=self.data["model4"])._self_ref_order, 0)
1026+
self.assertEqual(Store.objects.get(id=self.data["model4"])._self_ref_order, 1)
10271027

10281028
def test_update_legacy_self_ref_order_nulls_non_self_ref_models(self):
10291029
store = self._make_transferred_store(
@@ -1053,8 +1053,8 @@ def test_update_legacy_self_ref_order_handles_deeper_self_ref_chains(self):
10531053
child.refresh_from_db()
10541054
grandchild.refresh_from_db()
10551055
self.assertEqual(root._self_ref_order, 0)
1056-
self.assertEqual(child._self_ref_order, 0)
1057-
self.assertEqual(grandchild._self_ref_order, 0)
1056+
self.assertEqual(child._self_ref_order, 1)
1057+
self.assertEqual(grandchild._self_ref_order, 2)
10581058

10591059
def test_local_dequeue_operation(self):
10601060
self.transfer_session.records_transferred = 1

0 commit comments

Comments
 (0)