Android Room и kotlin: добавление условного AND к запросу (например, фильтра) - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь создать запрос, который возвращает количество строк в таблице на основе переданного идентификатора и массив логических значений, который действует как дополнительный фильтр. На данный момент я добавляю фильтр с использованием логического значения 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))
    }
}

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете попробовать это:

@Delete
 public void deleteTasks(Task... tasks)

См .: введите описание ссылки здесь

...