diff --git a/kmp/src/commonMain/kotlin/dev/stapler/stelekit/repository/SqlDelightBlockRepository.kt b/kmp/src/commonMain/kotlin/dev/stapler/stelekit/repository/SqlDelightBlockRepository.kt index c135b8ec..e6d91aa8 100644 --- a/kmp/src/commonMain/kotlin/dev/stapler/stelekit/repository/SqlDelightBlockRepository.kt +++ b/kmp/src/commonMain/kotlin/dev/stapler/stelekit/repository/SqlDelightBlockRepository.kt @@ -368,11 +368,16 @@ class SqlDelightBlockRepository( } override suspend fun deleteBulk(blockUuids: List, deleteChildren: Boolean): Either = withContext(PlatformDispatcher.DB) { + if (blockUuids.isEmpty()) return@withContext Unit.right() try { val wikilinkPages = mutableSetOf() queries.transaction { + val blocks = blockUuids.chunked(900).flatMap { chunk -> + queries.selectBlocksByUuids(chunk).executeAsList() + } + val blocksByUuid = blocks.associateBy { it.uuid } blockUuids.forEach { uuid -> - val block = queries.selectBlockByUuid(uuid).executeAsOneOrNull() ?: return@forEach + val block = blocksByUuid[uuid] ?: return@forEach wikilinkPages.addAll(extractWikilinks(block.content)) if (deleteChildren) { // Collect the full subtree diff --git a/kmp/src/commonMain/sqldelight/dev/stapler/stelekit/db/SteleDatabase.sq b/kmp/src/commonMain/sqldelight/dev/stapler/stelekit/db/SteleDatabase.sq index 51f99687..001f2d46 100644 --- a/kmp/src/commonMain/sqldelight/dev/stapler/stelekit/db/SteleDatabase.sq +++ b/kmp/src/commonMain/sqldelight/dev/stapler/stelekit/db/SteleDatabase.sq @@ -922,3 +922,6 @@ INSERT OR REPLACE INTO git_config( deleteGitConfig: DELETE FROM git_config WHERE graph_id = ?; + +selectBlocksByUuids: +SELECT * FROM blocks WHERE uuid IN ?;