@ -152,51 +149,24 @@ public abstract class CaldavDao {
publicabstractList<Long>getTasksWithTags();
@Query(
"UPDATE caldav_tasks"
+" SET cd_parent = IFNULL(("
+" SELECT cd_task FROM caldav_tasks AS p "
+" WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent"
+" AND p.cd_calendar = caldav_tasks.cd_calendar"
+" AND p.cd_deleted = 0),"
+" 0)")
"UPDATE tasks SET parent = IFNULL(("
+" SELECT p.cd_task FROM caldav_tasks AS p"
+" INNER JOIN caldav_tasks ON caldav_tasks.cd_task = tasks._id"
+" WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent"
+" AND p.cd_calendar = caldav_tasks.cd_calendar"
+" AND p.cd_deleted = 0), 0)"
+"WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task WHERE cd_deleted = 0)")
publicabstractvoidupdateParents();
@Query("UPDATE caldav_tasks SET cd_parent = IFNULL((SELECT cd_task FROM caldav_tasks AS p WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent), 0) WHERE cd_calendar = :calendar")
@Query(
"UPDATE tasks SET parent = IFNULL(("
+" SELECT p.cd_task FROM caldav_tasks AS p"
+" INNER JOIN caldav_tasks "
+" ON caldav_tasks.cd_task = tasks._id"
+" AND caldav_tasks.cd_calendar = :calendar"
+" WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent"
+" AND p.cd_calendar = caldav_tasks.cd_calendar"
+" AND caldav_tasks.cd_deleted = 0), 0)"
+"WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task WHERE cd_deleted = 0 AND cd_calendar = :calendar)")
publicabstractvoidupdateParents(Stringcalendar);
publicList<Long>getChildren(longid){
returngetChildren(Collections.singletonList(id));
}
publicList<Long>getChildren(List<Long>ids){
returnatLeastLollipop()
?getChildrenRecursive(ids)
:Collections.emptyList();
}
@Query("WITH RECURSIVE "
+" recursive_caldav (cd_task) AS ( "
+" SELECT cd_task "
+" FROM tasks "
+" INNER JOIN caldav_tasks "
+" ON _id = cd_task "
+" WHERE cd_parent IN (:ids) "
+" AND tasks.deleted = 0 AND caldav_tasks.cd_deleted = 0 "
+"UNION ALL "
+" SELECT caldav_tasks.cd_task "
+" FROM tasks "
+" INNER JOIN caldav_tasks "
+" ON _id = caldav_tasks.cd_task "
+" INNER JOIN recursive_caldav "
+" ON recursive_caldav.cd_task = caldav_tasks.cd_parent "
+" WHERE tasks.deleted = 0 AND caldav_tasks.cd_deleted = 0 "