GOOGLE ADS

вторник, 12 апреля 2022 г.

SqlDelight, MySql и Flow: лямбда-выражение Flow не вызывается при изменении базы данных.

Я играю с SqlDelight, используя MySql с источником данных Hikary в простом проекте JVM, используя Kotlin и Flow для обработки результатов запросов. Первое выполнение запроса возвращает данные, как и ожидалось, однако Flow#emit() не запускается при изменении данных в базе данных.

Это функция репозитория, которую я вызываю:

fun getAllUser(): Flow<List<User>> = database.userQueries.getAll()
.asFlow()
.mapToList()

Это основная функция, в которой вызывается функция репозитория:

 fun main() = runBlocking<Unit> { repository.getAllUser().collect {
println("Collecting users: $it")
}
}

Я попытался отладить подчиненный код, и прослушиватель объекта Query зарегистрирован, а основной корректно заблокирован при выполнении функции репозитория. Кто-нибудь еще испытал что-то подобное?


Решение проблемы

Так глупо, мой плохой! Я обновлял базу данных вручную и ожидал, что Flow волшебным образом обновится. В любом случае, обновление базы данных с помощью функций SqlDelight приводит к тому, что Flow выдает обновленный набор записей, как и ожидалось.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...