Open radex opened 5 years ago
@radex Can I work on this?
@sd1998 Absolutely!
@radex Could you please direct me towards the point I should start from to solve this issue? Thanks.
@sd1998 yeah! take a look at this PR: https://github.com/Nozbe/WatermelonDB/pull/399 — Step 2 was implemented there. So the tests are already there, now Step 3 is just to make it faster. In Model/helpers you have the implementation...
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
This is to fix: https://github.com/Nozbe/WatermelonDB/issues/186
Right now, deleting records is not very efficient in WatermelonDB.
Say you have models like this: Blog has_many Post has_many Comment. If you want to delete a blog post, you also have to delete all its posts, and all their comments. This happens one-by-one currently. What we need is the ability to efficiently (and atomically if possible) delete the whole tree in one go.
This needs some work and we need Community help (your help!) to achieve this:
prepareMarkAsDelete
/prepareDestroyPermanently
on batch - https://github.com/Nozbe/WatermelonDB/pull/294Model.experimental_markAsDelete()
/Model.experimental_destroyPermanently()
, which will iterate over model'sassociations
and for eachbelongs_to
relationship, for each of themfetch()
record's children, and then repeat for each of those children — and when we get to leafs of the tree, execute a batch withmarkAsDelete/destroyPermanently
for all of these. The point is to have a new method that automatically deletes the whole tree — so that the user doesn't have to manually override the delete methodsfetch()
on each child'd children collection (e.g. when deleting a Blog, we don't fetch each post's comment collection), we collect all child IDs and make a query to fetch all records of a given type all at once (e.g. we fetch blog's posts, and then we fetch all comments whose post_id is one of the ids of posts we fetched)delete({ permanently: boolean })
method, consider adding an association flag to skip deleting certain children, consider adding asupportsFastDelete = false
Model flag if necessary, etc.