Add optional limit to queries

pull/3893/merge
Alex Baker 2 days ago
parent 14530aa7a6
commit 7a8aca0dbb

@ -300,7 +300,8 @@ internal class TasksWidgetViewFactory(
private suspend fun getQuery(filter: Filter): String {
subtasksHelper.applySubtasksToWidgetFilter(filter, widgetPreferences)
return getQuery(widgetPreferences, filter)
val limit = if (taskLimit == Int.MAX_VALUE) null else taskLimit
return getQuery(widgetPreferences, filter, limit)
}
private fun formatDueDate(row: RemoteViews, task: TaskContainer) = with(row) {

@ -40,19 +40,20 @@ object TaskListQuery {
fun getQuery(
preferences: QueryPreferences,
filter: Filter,
limit: Int? = null,
): String {
val start = currentTimeMillis()
return when {
filter.supportsManualSort() && preferences.isManualSort ->
getRecursiveQuery(filter, preferences)
getRecursiveQuery(filter, preferences, limit)
filter is AstridOrderingFilter && preferences.isAstridSort ->
getNonRecursiveQuery(filter, preferences)
getNonRecursiveQuery(filter, preferences, limit)
filter.supportsSorting() ->
getRecursiveQuery(filter, preferences)
getRecursiveQuery(filter, preferences, limit)
else -> getNonRecursiveQuery(filter, preferences)
else -> getNonRecursiveQuery(filter, preferences, limit)
}.also { Logger.v("TaskListQuery") { "Building query took ${currentTimeMillis() - start}ms" } }
}
}

@ -29,7 +29,7 @@ internal object TaskListQueryNonRecursive {
field("tasks.completed > 0").`as`("parentComplete")
)).toTypedArray()
fun getNonRecursiveQuery(filter: Filter, preferences: QueryPreferences): String {
fun getNonRecursiveQuery(filter: Filter, preferences: QueryPreferences, limit: Int? = null): String {
val joinedQuery = JOINS + if (filter is AstridOrderingFilter) filter.getSqlQuery() else filter.sql!!
val sortMode = preferences.sortMode
val groupMode = preferences.groupMode
@ -52,9 +52,10 @@ internal object TaskListQueryNonRecursive {
else ->
"$query GROUP BY ${Task.ID}"
}
return Query.select(*FIELDS.plus(sortGroup))
val result = Query.select(*FIELDS.plus(sortGroup))
.withQueryTemplate(PermaSql.replacePlaceholdersForQuery(groupedQuery))
.from(Task.TABLE)
.toString()
return if (limit != null) "$result LIMIT $limit" else result
}
}

@ -19,6 +19,7 @@ internal object TaskListQueryRecursive {
fun getRecursiveQuery(
filter: Filter,
preferences: QueryPreferences,
limit: Int? = null,
): String {
val parentQuery = when (filter) {
is CaldavFilter -> newCaldavQuery(filter.uuid)
@ -165,6 +166,7 @@ internal object TaskListQueryRecursive {
${TaskListQuery.JOINS}
GROUP BY tasks._id
ORDER BY sequence
${limit?.let { "LIMIT $it" } ?: ""}
""".trimIndent()
return SortHelper.adjustQueryForFlags(preferences, query)

Loading…
Cancel
Save