Separate timings for building query

pull/3302/head
Alex Baker 10 months ago
parent 9016a7b628
commit bd550f68eb

@ -223,7 +223,7 @@ class CaldavManualSortTaskAdapterTest : InjectingTestCase() {
} }
private fun move(from: Int, to: Int, indent: Int = 0) = runBlocking { private fun move(from: Int, to: Int, indent: Int = 0) = runBlocking {
tasks.addAll(taskDao.fetchTasks { getQuery(preferences, filter) }) tasks.addAll(taskDao.fetchTasks(getQuery(preferences, filter)))
val adjustedTo = if (from < to) to + 1 else to // match DragAndDropRecyclerAdapter behavior val adjustedTo = if (from < to) to + 1 else to // match DragAndDropRecyclerAdapter behavior
adapter.moved(from, adjustedTo, indent) adapter.moved(from, adjustedTo, indent)
} }

@ -426,7 +426,7 @@ class GoogleTaskManualSortAdapterTest : InjectingTestCase() {
} }
private fun move(from: Int, to: Int, indent: Int = 0) = runBlocking { private fun move(from: Int, to: Int, indent: Int = 0) = runBlocking {
tasks.addAll(taskDao.fetchTasks { getQuery(preferences, filter) }) tasks.addAll(taskDao.fetchTasks(getQuery(preferences, filter)))
val adjustedTo = if (from < to) to + 1 else to val adjustedTo = if (from < to) to + 1 else to
adapter.moved(from, adjustedTo, indent) adapter.moved(from, adjustedTo, indent)
} }

@ -84,6 +84,6 @@ class OfflineSubtaskTest : InjectingTestCase() {
} }
private fun query() = runBlocking { private fun query() = runBlocking {
tasks.addAll(taskDao.fetchTasks { getQuery(preferences, filter) }) tasks.addAll(taskDao.fetchTasks(getQuery(preferences, filter)))
} }
} }

@ -75,9 +75,9 @@ class RecursiveLoopTest : InjectingTestCase() {
assertEquals(grandchild, tasks[2].id) assertEquals(grandchild, tasks[2].id)
} }
private suspend fun getTasks() = taskDao.fetchTasks { private suspend fun getTasks() = taskDao.fetchTasks(
getQuery(preferences, TodayFilter.create()) getQuery(preferences, TodayFilter.create())
} )
private suspend fun addTask(vararg properties: PropertyValue<in Task?, *>): Long { private suspend fun addTask(vararg properties: PropertyValue<in Task?, *>): Long {
val task = newTask(*properties) val task = newTask(*properties)

@ -105,7 +105,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() {
googleTaskDao.insert(newCaldavTask(with(CALENDAR, filter.uuid), with(TASK, id))) googleTaskDao.insert(newCaldavTask(with(CALENDAR, filter.uuid), with(TASK, id)))
} }
private suspend fun query(): List<TaskContainer> = taskDao.fetchTasks { private suspend fun query(): List<TaskContainer> = taskDao.fetchTasks(
TaskListQuery.getQuery(preferences, filter) TaskListQuery.getQuery(preferences, filter)
} )
} }

@ -144,8 +144,8 @@ class TaskDao @Inject constructor(
internal suspend fun insert(task: Task): Long = taskDao.insert(task) internal suspend fun insert(task: Task): Long = taskDao.insert(task)
internal suspend fun fetchTasks(callback: suspend () -> List<String>): List<TaskContainer> = internal suspend fun fetchTasks(queries: List<String>): List<TaskContainer> =
taskDao.fetchTasks(callback) taskDao.fetchTasks(queries)
internal suspend fun getAll(): List<Task> = taskDao.getAll() internal suspend fun getAll(): List<Task> = taskDao.getAll()

@ -12,9 +12,7 @@ import org.tasks.time.DateTimeUtils2.currentTimeMillis
import timber.log.Timber import timber.log.Timber
suspend fun TaskDao.fetchTasks(preferences: QueryPreferences, filter: Filter): List<TaskContainer> = suspend fun TaskDao.fetchTasks(preferences: QueryPreferences, filter: Filter): List<TaskContainer> =
fetchTasks { fetchTasks(TaskListQuery.getQuery(preferences, filter))
TaskListQuery.getQuery(preferences, filter)
}
internal suspend fun TaskDao.setCollapsed(preferences: QueryPreferences, filter: Filter, collapsed: Boolean) { internal suspend fun TaskDao.setCollapsed(preferences: QueryPreferences, filter: Filter, collapsed: Boolean) {
fetchTasks(preferences, filter) fetchTasks(preferences, filter)

@ -144,7 +144,7 @@ class TaskListViewModel @Inject constructor(
it.searchQuery.isBlank() -> MyTasksFilter.create() it.searchQuery.isBlank() -> MyTasksFilter.create()
else -> applicationContext.createSearchQuery(it.searchQuery) else -> applicationContext.createSearchQuery(it.searchQuery)
} }
taskDao.fetchTasks { getQuery(preferences, filter) } taskDao.fetchTasks(getQuery(preferences, filter))
} }
.onEach { tasks -> .onEach { tasks ->
_state.update { _state.update {

@ -70,7 +70,7 @@ internal class TasksWidgetViewFactory(
runBlocking { runBlocking {
val collapsed = widgetPreferences.collapsed val collapsed = widgetPreferences.collapsed
tasks = SectionedDataSource( tasks = SectionedDataSource(
taskDao.fetchTasks { getQuery(filter) }, taskDao.fetchTasks(getQuery(filter)),
disableGroups, disableGroups,
settings.groupMode, settings.groupMode,
widgetPreferences.subtaskMode, widgetPreferences.subtaskMode,

@ -110,10 +110,9 @@ FROM (
+ "WHERE completed > 0 AND calendarUri IS NOT NULL AND calendarUri != ''") + "WHERE completed > 0 AND calendarUri IS NOT NULL AND calendarUri != ''")
abstract suspend fun clearCompletedCalendarEvents(): Int abstract suspend fun clearCompletedCalendarEvents(): Int
open suspend fun fetchTasks(callback: suspend () -> List<String>): List<TaskContainer> = open suspend fun fetchTasks(queries: List<String>): List<TaskContainer> =
database.withTransaction { database.withTransaction {
val start = if (IS_DEBUG) DateTimeUtils2.currentTimeMillis() else 0 val start = if (IS_DEBUG) DateTimeUtils2.currentTimeMillis() else 0
val queries = callback()
val last = queries.size - 1 val last = queries.size - 1
for (i in 0 until last) { for (i in 0 until last) {
execSQL(queries[i]) execSQL(queries[i])

@ -1,5 +1,6 @@
package org.tasks.data package org.tasks.data
import co.touchlab.kermit.Logger
import org.tasks.data.TaskListQueryNonRecursive.getNonRecursiveQuery import org.tasks.data.TaskListQueryNonRecursive.getNonRecursiveQuery
import org.tasks.data.TaskListQueryRecursive.getRecursiveQuery import org.tasks.data.TaskListQueryRecursive.getRecursiveQuery
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
@ -14,6 +15,7 @@ import org.tasks.data.sql.Join
import org.tasks.filters.AstridOrderingFilter import org.tasks.filters.AstridOrderingFilter
import org.tasks.filters.Filter import org.tasks.filters.Filter
import org.tasks.preferences.QueryPreferences import org.tasks.preferences.QueryPreferences
import org.tasks.time.DateTimeUtils2.currentTimeMillis
object TaskListQuery { object TaskListQuery {
private const val CALDAV_METADATA_JOIN = "for_caldav" private const val CALDAV_METADATA_JOIN = "for_caldav"
@ -41,13 +43,19 @@ object TaskListQuery {
fun getQuery( fun getQuery(
preferences: QueryPreferences, preferences: QueryPreferences,
filter: Filter, filter: Filter,
): MutableList<String> = when { ): MutableList<String> {
filter.supportsManualSort() && preferences.isManualSort -> val start = currentTimeMillis()
getRecursiveQuery(filter, preferences) return when {
filter is AstridOrderingFilter && preferences.isAstridSort -> filter.supportsManualSort() && preferences.isManualSort ->
getNonRecursiveQuery(filter, preferences) getRecursiveQuery(filter, preferences)
filter.supportsSorting() ->
getRecursiveQuery(filter, preferences) filter is AstridOrderingFilter && preferences.isAstridSort ->
else -> getNonRecursiveQuery(filter, preferences) getNonRecursiveQuery(filter, preferences)
filter.supportsSorting() ->
getRecursiveQuery(filter, preferences)
else -> getNonRecursiveQuery(filter, preferences)
}.also { Logger.v { "Building query took ${currentTimeMillis() - start}ms" } }
} }
} }
Loading…
Cancel
Save