|
|
@ -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 */
|
|
|
|