Fix non-recursive place query crash

pull/996/head
Alex Baker 5 years ago
parent a865d91a59
commit 7a5edcf9fc

@ -80,6 +80,6 @@ public interface LocationDao {
+ " LEFT JOIN geofences ON geofences.place = places.uid "
+ " LEFT JOIN tasks ON geofences.task = tasks._id AND tasks.completed = 0 AND tasks.deleted = 0 AND tasks.hideUntil < :now"
+ " GROUP BY places.uid"
+ " ORDER BY count DESC, name COLLATE NOCASE ASC")
+ " ORDER BY name COLLATE NOCASE ASC")
List<LocationFilters> getPlaceFilters(long now);
}

@ -4,7 +4,10 @@ import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import com.todoroo.andlib.data.Table;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.api.Filter;
@ -35,6 +38,11 @@ public class PlaceFilter extends Filter {
};
private Place place;
private static final Table G2 = Geofence.TABLE.as("G2");
private static final Field G2_PLACE = Field.field("G2.place");
private static final Field G2_TASK = Field.field("G2.task");
private static final Table P2 = Place.TABLE.as("P2");
private static final Field P2_UID = Field.field("P2.uid");
private PlaceFilter(Parcel source) {
super();
@ -65,13 +73,9 @@ public class PlaceFilter extends Filter {
private static QueryTemplate queryTemplate(Place place) {
return new QueryTemplate()
.join(Join.inner(Geofence.TABLE, Task.ID.eq(Geofence.TASK)))
.join(Join.inner(Place.TABLE, Place.UID.eq(Geofence.PLACE)))
.where(getCriterion(place));
}
private static Criterion getCriterion(Place place) {
return Criterion.and(TaskDao.TaskCriteria.activeAndVisible(), Place.UID.eq(place.getUid()));
.join(Join.inner(G2, Task.ID.eq(G2_TASK)))
.join(Join.inner(P2, P2_UID.eq(G2_PLACE)))
.where(Criterion.and(TaskDao.TaskCriteria.activeAndVisible(), G2_PLACE.eq(place.getUid())));
}
private static Map<String, Object> getValuesForNewTask(Place place) {

Loading…
Cancel
Save