From ae949ad7846a03fa78fc7225d0033e8e72b3de11 Mon Sep 17 00:00:00 2001 From: andrekir Date: Mon, 4 Sep 2023 18:17:49 -0300 Subject: [PATCH] fix: limit number of parameters per delete operation Splits the list of message UUIDs into smaller chunks to perform batch deletions with a maximum of 500 UUIDs per operation, avoiding `SQLiteException: too many SQL variables (code 1 SQLITE_ERROR)`. fixes #711 --- .../java/com/geeksville/mesh/database/PacketRepository.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/geeksville/mesh/database/PacketRepository.kt b/app/src/main/java/com/geeksville/mesh/database/PacketRepository.kt index 7f0f54d9f..e9ccb341e 100644 --- a/app/src/main/java/com/geeksville/mesh/database/PacketRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/database/PacketRepository.kt @@ -47,7 +47,9 @@ class PacketRepository @Inject constructor(private val packetDaoLazy: dagger.Laz } suspend fun deleteMessages(uuidList: List) = withContext(Dispatchers.IO) { - packetDao.deleteMessages(uuidList) + for (chunk in uuidList.chunked(500)) { // limit number of UUIDs per query + packetDao.deleteMessages(chunk) + } } suspend fun deleteWaypoint(id: Int) = withContext(Dispatchers.IO) {