Tweaking recursive query

gtask_related_email
Alex Baker 6 years ago
parent aca3a1e933
commit 7bbc9fe279

@ -70,7 +70,7 @@ public class TaskListViewModel extends ViewModel implements Observer<PagedList<T
.as("tags"); .as("tags");
private static final StringProperty TAGS_RECURSIVE = private static final StringProperty TAGS_RECURSIVE =
new StringProperty(null, "(SELECT group_concat(distinct(tag_uid))\n" + new StringProperty(null, "(SELECT group_concat(distinct(tag_uid))\n" +
"FROM tags WHERE tags.task = recursive_caldav.cd_task\n" + "FROM tags WHERE tags.task = recursive_tasks.task\n" +
"GROUP BY tags.task)") "GROUP BY tags.task)")
.as("tags"); .as("tags");
@ -140,49 +140,43 @@ public class TaskListViewModel extends ViewModel implements Observer<PagedList<T
fields.add(INDENT); fields.add(INDENT);
String joinedQuery = String joinedQuery =
Join.left(Task.TABLE, Task.ID.eq(field("recursive_caldav.cd_task"))) Join.left(Task.TABLE, Task.ID.eq(field("recursive_tasks.task")))
+ Join.left(GoogleTask.TABLE.as(GTASK_METADATA_JOIN), gtaskJoinCriterion).toString() + Join.left(GoogleTask.TABLE.as(GTASK_METADATA_JOIN), gtaskJoinCriterion).toString()
+ Join.left(CaldavTask.TABLE.as(CALDAV_METADATA_JOIN), caldavJoinCriterion) + Join.left(CaldavTask.TABLE.as(CALDAV_METADATA_JOIN), caldavJoinCriterion)
+ Join.left(Geofence.TABLE, field(Geofence.TABLE_NAME + ".task").eq(Task.ID)) + Join.left(Geofence.TABLE, field(Geofence.TABLE_NAME + ".task").eq(Task.ID))
+ Join.left(Place.TABLE, field(Place.TABLE_NAME + ".uid").eq(field("geofences.place"))); + Join.left(Place.TABLE, field(Place.TABLE_NAME + ".uid").eq(field("geofences.place")));
String uuid = ((CaldavFilter) filter).getUuid();
String sortSelect = SortHelper.orderSelectForSortTypeRecursive(preferences.getSortMode()); String sortSelect = SortHelper.orderSelectForSortTypeRecursive(preferences.getSortMode());
Order order = SortHelper.orderForSortTypeRecursive(preferences); Order order = SortHelper.orderForSortTypeRecursive(preferences);
String filterSql = filter.getSqlQuery(); String filterSql = filter.getSqlQuery();
// Remove unwanted join // Remove unwanted join
String joinSql = ((CaldavFilter) filter).getJoinSql(); filterSql = filterSql.replace(CaldavFilter.getJoinSql(), "");
filterSql = filterSql.replace(joinSql, "");
String calDavWithClause = "WITH RECURSIVE\n" String withClause = "WITH RECURSIVE\n"
+ " recursive_caldav (cd_id, cd_task, indent, title, sortField) AS (\n" + " recursive_tasks (task, indent, title, sortField) AS (\n"
+ " SELECT cd_id, cd_task, 0 AS sort_indent, UPPER(title) AS sort_title, " + sortSelect + "\n" + " SELECT _id, 0 AS sort_indent, UPPER(title) AS sort_title, " + sortSelect + "\n"
+ " FROM tasks\n" + " FROM tasks\n"
+ " INNER JOIN caldav_tasks\n" + " INNER JOIN caldav_tasks ON tasks._id = cd_task\n"
+ " ON tasks._id = cd_task\n" + filterSql + "\n"
+ " WHERE cd_parent = 0\n" + " AND cd_parent = 0\n"
+ " AND cd_calendar='" + uuid + "'\n"
+ " AND " + filterSql.replace("WHERE", "") + "\n"
+ " UNION ALL\n" + " UNION ALL\n"
+ " SELECT caldav_tasks.cd_id, caldav_tasks.cd_task, recursive_caldav.indent+1 AS sort_indent, UPPER(tasks.title) AS sort_title, " + sortSelect + "\n" + " SELECT _id, recursive_tasks.indent+1 AS sort_indent, UPPER(tasks.title) AS sort_title, " + sortSelect + "\n"
+ " FROM tasks\n" + " FROM tasks\n"
+ " INNER JOIN caldav_tasks\n" + " INNER JOIN caldav_tasks\n"
+ " ON tasks._id = caldav_tasks.cd_task\n" + " ON tasks._id = caldav_tasks.cd_task\n"
+ " INNER JOIN recursive_caldav\n" + " INNER JOIN recursive_tasks\n"
+ " ON recursive_caldav.cd_task = caldav_tasks.cd_parent\n" + " ON recursive_tasks.task = caldav_tasks.cd_parent\n"
+ filterSql + "\n" + filterSql + "\n"
+ " ORDER BY sort_indent DESC, " + order + "\n" + " ORDER BY sort_indent DESC, " + order + "\n"
+ " )\n"; + " )\n";
calDavWithClause = withClause = SortHelper.adjustQueryForFlags(preferences, withClause);
SortHelper.adjustQueryForFlags(preferences, calDavWithClause);
return Query.select(fields.toArray(new Field[0])) return Query.select(fields.toArray(new Field[0]))
.withQueryTemplate(PermaSql.replacePlaceholdersForQuery(joinedQuery)) .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(joinedQuery))
.withPreClause(calDavWithClause) .withPreClause(withClause)
.from(new Table("recursive_caldav")) .from(new Table("recursive_tasks"))
.toString(); .toString();
} else { } else {
fields.add(TAGS); fields.add(TAGS);

Loading…
Cancel
Save