Faster parseResult array builder

This commit is contained in:
Vitor Pamplona
2025-12-18 12:02:23 -05:00
parent 12beeea8ee
commit fde5d57b16
2 changed files with 9 additions and 8 deletions
@@ -23,7 +23,7 @@ package com.vitorpamplona.quartz.nip01Core.store.sqlite
import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteDatabase
class AddressableModule : IModule { class AddressableModule : IModule {
fun create(db: SQLiteDatabase) { override fun create(db: SQLiteDatabase) {
db.execSQL( db.execSQL(
""" """
CREATE UNIQUE INDEX addressable_idx CREATE UNIQUE INDEX addressable_idx
@@ -69,4 +69,8 @@ class AddressableModule : IModule {
""".trimIndent(), """.trimIndent(),
) )
} }
override fun drop(db: SQLiteDatabase) {}
override fun deleteAll(db: SQLiteDatabase) {}
} }
@@ -258,7 +258,7 @@ class EventIndexesModule(
} }
private fun <T : Event> parseResults(cursor: Cursor): List<T> { private fun <T : Event> parseResults(cursor: Cursor): List<T> {
val events = ArrayList<T>() val events = ArrayList<T>(cursor.count)
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
events.add( events.add(
@@ -396,29 +396,26 @@ class EventIndexesModule(
val projection = val projection =
buildString { buildString {
val anchorColumn: String
val joins = mutableListOf<String>() val joins = mutableListOf<String>()
if (hasHeaders) { if (hasHeaders) {
append("SELECT event_headers.row_id as row_id FROM event_headers") append("SELECT event_headers.row_id as row_id FROM event_headers")
anchorColumn = "event_headers.row_id"
if (hasSearch) { if (hasSearch) {
joins.add("INNER JOIN ${fts.tableName} ON ${fts.tableName}.${fts.eventHeaderRowIdName} = $anchorColumn") joins.add("INNER JOIN ${fts.tableName} ON ${fts.tableName}.${fts.eventHeaderRowIdName} = event_headers.row_id")
} }
filter.tags?.forEach { (tagName, _) -> filter.tags?.forEach { (tagName, _) ->
if (tagName != "d") { if (tagName != "d") {
joins.add("INNER JOIN event_tags as tag$tagName ON tag$tagName.event_header_row_id = $anchorColumn") joins.add("INNER JOIN event_tags as tag$tagName ON tag$tagName.event_header_row_id = event_headers.row_id")
} }
} }
} else if (hasSearch) { } else if (hasSearch) {
append("SELECT ${fts.tableName}.${fts.eventHeaderRowIdName} as row_id FROM ${fts.tableName}") append("SELECT ${fts.tableName}.${fts.eventHeaderRowIdName} as row_id FROM ${fts.tableName}")
anchorColumn = "${fts.tableName}.${fts.eventHeaderRowIdName}"
filter.tags?.forEach { (tagName, _) -> filter.tags?.forEach { (tagName, _) ->
if (tagName != "d") { if (tagName != "d") {
joins.add("INNER JOIN event_tags as tag$tagName ON tag$tagName.event_header_row_id = $anchorColumn") joins.add("INNER JOIN event_tags as tag$tagName ON tag$tagName.event_header_row_id = ${fts.tableName}.${fts.eventHeaderRowIdName}")
} }
} }
} else { } else {