Use RawQuery for count

gtask_related_email
Alex Baker 5 years ago
parent 25a01c13b1
commit cb9dbad6bb

@ -6,8 +6,9 @@
package com.todoroo.andlib.sql; package com.todoroo.andlib.sql;
final class SqlConstants { public final class SqlConstants {
public static final Field COUNT = Field.field("COUNT(*)");
public static final String SELECT = "SELECT"; public static final String SELECT = "SELECT";
public static final String SPACE = " "; public static final String SPACE = " ";
public static final String AS = "AS"; public static final String AS = "AS";

@ -6,6 +6,7 @@
package com.todoroo.astrid.dao; package com.todoroo.astrid.dao;
import static com.todoroo.andlib.sql.SqlConstants.COUNT;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop;
import static com.todoroo.andlib.utility.DateUtilities.now; import static com.todoroo.andlib.utility.DateUtilities.now;
@ -21,6 +22,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Functions;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.PermaSql;
@ -148,6 +150,9 @@ public abstract class TaskDao {
@RawQuery @RawQuery
abstract List<TaskContainer> fetchTasks(SimpleSQLiteQuery query); abstract List<TaskContainer> fetchTasks(SimpleSQLiteQuery query);
@RawQuery
abstract int count(SimpleSQLiteQuery query);
@Query( @Query(
"SELECT EXISTS(" "SELECT EXISTS("
+ "SELECT 1 FROM google_tasks WHERE gt_parent > 0 AND gt_deleted = 0" + "SELECT 1 FROM google_tasks WHERE gt_parent > 0 AND gt_deleted = 0"
@ -208,12 +213,7 @@ public abstract class TaskDao {
public abstract List<Task> getAstrid2TaskProviderTasks(); public abstract List<Task> getAstrid2TaskProviderTasks();
public int count(Filter filter) { public int count(Filter filter) {
Cursor cursor = getCursor(filter.sqlQuery); return count(getQuery(filter.sqlQuery, COUNT));
try {
return cursor.getCount();
} finally {
cursor.close();
}
} }
public List<Task> fetchFiltered(Filter filter) { public List<Task> fetchFiltered(Filter filter) {
@ -221,7 +221,7 @@ public abstract class TaskDao {
} }
public List<Task> fetchFiltered(String queryTemplate) { public List<Task> fetchFiltered(String queryTemplate) {
Cursor cursor = getCursor(queryTemplate); Cursor cursor = database.query(getQuery(queryTemplate, Task.PROPERTIES), null);
List<Task> result = new ArrayList<>(); List<Task> result = new ArrayList<>();
try { try {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
@ -233,15 +233,16 @@ public abstract class TaskDao {
} }
} }
private Cursor getCursor(String queryTemplate) { private static SimpleSQLiteQuery getQuery(String queryTemplate, Field... fields) {
com.todoroo.andlib.sql.Query query = String queryString =
com.todoroo.andlib.sql.Query.select(Task.PROPERTIES) com.todoroo.andlib.sql.Query.select(fields)
.withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate)); .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate))
String queryString = query.from(Task.TABLE).toString(); .from(Task.TABLE)
.toString();
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
Timber.v(queryString); Timber.v(queryString);
} }
return database.query(queryString, null); return new SimpleSQLiteQuery(queryString);
} }
/** Generates SQL clauses */ /** Generates SQL clauses */

Loading…
Cancel
Save