Clean up query builder

gtask_related_email
Alex Baker 6 years ago
parent 951b8b8d81
commit d34780d770

@ -49,6 +49,21 @@ import timber.log.Timber;
public class TaskListViewModel extends ViewModel {
private static final Criterion JOIN_GTASK =
Criterion.and(
Task.ID.eq(field(GTASK_METADATA_JOIN + ".gt_task")),
field(GTASK_METADATA_JOIN + ".gt_deleted").eq(0));
private static final Criterion JOIN_CALDAV =
Criterion.and(
Task.ID.eq(field(CALDAV_METADATA_JOIN + ".cd_task")),
field(CALDAV_METADATA_JOIN + ".cd_deleted").eq(0));
private static final Criterion JOIN_TAGS = Task.ID.eq(field(TAGS_METADATA_JOIN + ".task"));
private static final String JOINS =
Join.left(GoogleTask.TABLE.as(GTASK_METADATA_JOIN), JOIN_GTASK).toString()
+ Join.left(CaldavTask.TABLE.as(CALDAV_METADATA_JOIN), JOIN_CALDAV)
+ Join.left(Geofence.TABLE, Geofence.TASK.eq(Task.ID))
+ Join.left(Place.TABLE, Place.UID.eq(Geofence.PLACE));
private static final Table RECURSIVE = new Table("recursive_tasks");
private static final Field RECURSIVE_TASK = field(RECURSIVE + ".task");
private static final Field TASKS = field("tasks.*");
@ -95,39 +110,6 @@ public class TaskListViewModel extends ViewModel {
public static List<String> getQuery(Preferences preferences, Filter filter) {
List<Field> fields = newArrayList(TASKS, GTASK, CALDAV, GEOFENCE, PLACE);
Criterion tagsJoinCriterion = Criterion.and(Task.ID.eq(field(TAGS_METADATA_JOIN + ".task")));
Criterion gtaskJoinCriterion =
Criterion.and(
Task.ID.eq(field(GTASK_METADATA_JOIN + ".gt_task")),
field(GTASK_METADATA_JOIN + ".gt_deleted").eq(0));
Criterion caldavJoinCriterion =
Criterion.and(
Task.ID.eq(field(CALDAV_METADATA_JOIN + ".cd_task")),
field(CALDAV_METADATA_JOIN + ".cd_deleted").eq(0));
if (filter instanceof TagFilter) {
String uuid = ((TagFilter) filter).getUuid();
tagsJoinCriterion =
Criterion.and(tagsJoinCriterion, field(TAGS_METADATA_JOIN + ".tag_uid").neq(uuid));
} else if (filter instanceof GtasksFilter) {
if (preferences.isManualSort()) {
fields.add(INDENT);
fields.add(CHILDREN);
fields.add(SIBLINGS);
fields.add(PRIMARY_SORT);
fields.add(SECONDARY_SORT);
}
} else if (filter instanceof CaldavFilter) {
String uuid = ((CaldavFilter) filter).getUuid();
caldavJoinCriterion =
Criterion.and(caldavJoinCriterion, field(CALDAV_METADATA_JOIN + ".cd_calendar").eq(uuid));
}
String joins =
Join.left(GoogleTask.TABLE.as(GTASK_METADATA_JOIN), gtaskJoinCriterion).toString()
+ Join.left(CaldavTask.TABLE.as(CALDAV_METADATA_JOIN), caldavJoinCriterion)
+ Join.left(Geofence.TABLE, Geofence.TASK.eq(Task.ID))
+ Join.left(Place.TABLE, Place.UID.eq(Geofence.PLACE));
if (atLeastLollipop()
&& (filter instanceof CaldavFilter
|| (!preferences.isManualSort() && filter instanceof GtasksFilter))) {
@ -142,7 +124,7 @@ public class TaskListViewModel extends ViewModel {
fields.add(TAGS_RECURSIVE);
fields.add(INDENT);
String joinedQuery = Join.inner(RECURSIVE, Task.ID.eq(RECURSIVE_TASK)) + joins;
String joinedQuery = Join.inner(RECURSIVE, Task.ID.eq(RECURSIVE_TASK)) + JOINS;
String parentQuery;
QueryTemplate subtaskQuery = new QueryTemplate();
if (filter instanceof CaldavFilter) {
@ -224,12 +206,26 @@ public class TaskListViewModel extends ViewModel {
} else {
fields.add(TAGS);
if (filter instanceof GtasksFilter && preferences.isManualSort()) {
fields.add(INDENT);
fields.add(CHILDREN);
fields.add(SIBLINGS);
fields.add(PRIMARY_SORT);
fields.add(SECONDARY_SORT);
}
// TODO: For now, we'll modify the query to join and include the things like tag data here.
// Eventually, we might consider restructuring things so that this query is constructed
// elsewhere.
Criterion tagsJoinCriterion =
filter instanceof TagFilter
? Criterion.and(
JOIN_TAGS,
field(TAGS_METADATA_JOIN + ".tag_uid").neq(((TagFilter) filter).getUuid()))
: JOIN_TAGS;
String joinedQuery =
Join.left(Tag.TABLE.as(TAGS_METADATA_JOIN), tagsJoinCriterion).toString()
+ joins
+ JOINS
+ filter.getSqlQuery();
String query =

Loading…
Cancel
Save