Как использовать Sqldelight с Kotlin сопрограммами - PullRequest
2 голосов
/ 23 февраля 2020

По-видимому, есть Kotlin функции расширения сопрограмм для SqlDelight, но я не знаю, как их реализовать, поскольку не могу найти документацию.

У меня есть обычный запрос, который выглядит следующим образом:

val allItems
  get() = itemQueries.selectAll().mapToList()

Можно ли превратить это в функцию приостановки?

1 Ответ

2 голосов
/ 23 февраля 2020

В настоящее время (v1.2.1) не поддерживается функция приостановки для запросов SqlDelight, однако вы можете использовать объект Coroutines Flow, что еще лучше. Для этого вам нужно добавить библиотеку расширений сопрограмм в своем приложении:

dependencies {
  implementation "com.squareup.sqldelight:coroutines-extensions:1.2.1"
}

Затем превратить ваш запрос в следующее:

val allItems: Flow<List<Item>> = 
  itemQueries.selectAll()
    .asFlow()
    .mapToList()

Этот поток генерирует результат запроса и выдает новый результат каждый раз, когда база данных изменяется для этого запроса.

Затем вы можете .collect{} результаты внутри области сопрограмм.

...