Допустим, у нас есть следующая запись в базе данных:
@Entity
data class Dog(
@ColumnInfo(name = "name") val name: String,
@ColumnInfo(name = "breed") val breed: String?
)
Как видите, не у каждой собаки есть определенная порода. Теперь мы хотим сделать запрос для поиска всех собак по их породе.
@Dao
interface DogDao {
@Query("SELECT * FROM dogs WHERE breed = :breed")
fun getByBreed(breed: String?): List<Dog>
}
Иногда мы хотим искать собак определенной породы, а иногда мы хотим искать собак, порода которых не определена. Проблема в том, что во втором случае приведенный выше запрос не сработает. Почему? Когда параметр breed
из метода getByBreed(breed:)
равен нулю, Room преобразует этот запрос во что-то вроде этого:
SELECT * FROM dogs WHERE breed = NULL
К сожалению, для SQLite запрос нулевых значений должен выглядеть так:
SELECT * FROM dogs WHERE breed IS NULL
Вопрос в том, как определить запрос, который принимает необязательные параметры?