diff options
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/data')
| -rw-r--r-- | app/src/main/java/org/terst/feedreader/data/Daos.kt | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/app/src/main/java/org/terst/feedreader/data/Daos.kt b/app/src/main/java/org/terst/feedreader/data/Daos.kt index 1f442e9..8a5f50e 100644 --- a/app/src/main/java/org/terst/feedreader/data/Daos.kt +++ b/app/src/main/java/org/terst/feedreader/data/Daos.kt @@ -149,6 +149,15 @@ interface ArticleDao { suspend fun delete(article: ArticleEntity) } +// A single markReadBatch(ids) call builds one query with one bound parameter per id -- +// "mark read from here" can realistically span hundreds of rows in a long-unread feed, +// and SQLite has a hard per-statement limit on bound variables (historically 999 on many +// Android SQLite builds). Chunking well under any realistic limit means this can't throw +// "too many SQL variables" and crash on an otherwise routine bulk mark-read tap. +suspend fun ArticleDao.markReadBatchChunked(ids: List<String>) { + ids.chunked(500).forEach { chunk -> markReadBatch(chunk) } +} + @Dao interface FilterRuleDao { @Query("SELECT * FROM filter_rules ORDER BY createdAt DESC") |
