From 16829dec6c6d9eef62d21e22ccfe3d911d97d1c1 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 8 May 2020 11:31:08 -0500 Subject: [PATCH] Fix duplicate search results --- .../main/java/com/todoroo/andlib/sql/Field.java | 17 +++++++++++++++++ .../com/todoroo/astrid/api/SearchFilter.java | 8 +++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/todoroo/andlib/sql/Field.java b/app/src/main/java/com/todoroo/andlib/sql/Field.java index 6aab81c12..f03bf09a1 100644 --- a/app/src/main/java/com/todoroo/andlib/sql/Field.java +++ b/app/src/main/java/com/todoroo/andlib/sql/Field.java @@ -50,6 +50,23 @@ public class Field extends DBObject { return UnaryCriterion.like(this, value); } + public Criterion in(final Query query) { + final Field field = this; + return new Criterion(Operator.in) { + + @Override + protected void populate(StringBuilder sb) { + sb.append(field) + .append(SPACE) + .append(Operator.in) + .append(SPACE) + .append(LEFT_PARENTHESIS) + .append(query) + .append(RIGHT_PARENTHESIS); + } + }; + } + public Criterion in(List entries) { final Field field = this; return new Criterion(Operator.in) { diff --git a/app/src/main/java/com/todoroo/astrid/api/SearchFilter.java b/app/src/main/java/com/todoroo/astrid/api/SearchFilter.java index 97b530642..63ccbe05f 100644 --- a/app/src/main/java/com/todoroo/astrid/api/SearchFilter.java +++ b/app/src/main/java/com/todoroo/astrid/api/SearchFilter.java @@ -3,7 +3,7 @@ package com.todoroo.astrid.api; import android.os.Parcel; import android.os.Parcelable; import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.sql.Join; +import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.astrid.data.Task; import org.tasks.data.Tag; @@ -37,14 +37,16 @@ public class SearchFilter extends Filter { private static QueryTemplate getQueryTemplate(String query) { return new QueryTemplate() - .join(Join.left(Tag.TABLE, Tag.TASK.eq(Task.ID))) .where( Criterion.and( Task.DELETION_DATE.eq(0), Criterion.or( Task.NOTES.like("%" + query + "%"), Task.TITLE.like("%" + query + "%"), - Tag.NAME.like("%" + query + "%")))); + Task.ID.in( + Query.select(Tag.TASK) + .from(Tag.TABLE) + .where(Tag.NAME.like("%" + query + "%")))))); } @Override