Я пытаюсь создать запрос, который возвращает количество строк в таблице на основе переданного идентификатора и массив логических значений, который действует как дополнительный фильтр. На данный момент я добавляю фильтр с использованием логического значения vararg, но это не оптимально. Есть ли какой-то другой способ добавить эту условную функциональность, которая будет иметь смысл?
Вот мой метод запроса:
@Query("SELECT COUNT(id) FROM tasks WHERE id = :id AND deleted IN (:filterDeleted)")
abstract fun countTasksById(id: String, vararg filterDeleted: Boolean = booleanArrayOf(false, true)): Int
А вот как это используется:
@Test
fun shouldCountOnlyDeleted() {
insertTestData(appDatabase)
val deleted = TEST_TASKS.take(5)
repository.softDeleteAll(deleted)
val nonDeleted = TEST_TASKS.filterNot { it in deleted }
deletedStudies.forEach {
assertThat(repository.countTasks(it.id, true), `is`(1))
}
nonDeleted.forEach {
assertThat(repository.countTasks(it.id, true), `is`(0))
}
}
@Test
fun shouldCountBothDeletedAndNonDeleted() {
insertTestData(appDatabase)
val deleted = TEST_TASKS.take(5)
repository.softDeleteAll(deleted)
val nonDeleted = TEST_TASKS.filterNot { it in deleted }
deletedStudies.forEach {
assertThat(repository.countTasks(it.id, false, true), `is`(1))
}
nonDeleted.forEach {
assertThat(repository.countTasks(it.id, false, true), `is`(1))
}
}