Room @RawQuery не работает с IN, но работает с LIKE - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь сделать запрос, в котором я хочу сопоставить поле со списком строк. Поле изначально является списком, который сохраняется в виде строки через TypeConverter. Если я сопоставлю это поле с предложением LIKE, оно будет работать:

    val sql = SimpleSQLiteQuery(
        """
        SELECT * FROM practice
        WHERE categories LIKE '%advaita%'
        ORDER BY id $order LIMIT $limit
        """
    )
    return searchPracticesByCategory(sql)

Но если я попытаюсь использовать предложение IN для передачи списка строк, я не получу результатов:

    val sql = SimpleSQLiteQuery(
        """
        SELECT * FROM practice
        WHERE categories IN ('%advaita%', '%meditation%')
        ORDER BY id $order LIMIT $limit
        """
    )
    return searchPracticesByCategory(sql)

В Дао я прокомментировал запрос следующим образом:

@RawQuery(observedEntities = [Practice::class])
abstract fun searchPracticesByCategory(query: SupportSQLiteQuery): Observable<List<Practice>>

Поле:

@TypeConverters(ListConverter::class)
val categories: List<String>? = null

И преобразователь типов:

class ListConverter: Serializable {

@TypeConverter
fun restoreList(listOfString: String?): List<String>? {
    return Gson().fromJson(
        listOfString,
        object : TypeToken<List<String>?>() {}.getType()
    )
}

@TypeConverter
fun saveList(listOfString: List<String>?): String? {
    return Gson().toJson(listOfString)
}

}

Любая идея, в чем проблема может быть?

...