Я провел день, пытаясь выяснить, почему Room не может обработать запрос, содержащий логические операторы AND и NOT, и не смог успешно заставить его работать.Возьмите следующий запрос:
SELECT Connections.rowid ,firstName ,lastName FROM Connections WHERE Connections MATCH 'occupation:director OR occupation:sales'
Это вернет несколько строк.Но если я запущу это:
SELECT Connections.rowid ,firstName ,lastName FROM Connections WHERE Connections MATCH 'occupation:director OR occupation:sales NOT occupation:europe'
Это не вернет никаких результатов.Я точно знаю, что результаты существуют.Если я использую приложение «DB Browser for Sqlite» для выполнения этих запросов, они возвращают ожидаемые результаты, поэтому я знаю, что данные и запрос работают.Та же проблема связана с использованием оператора AND.Однако Room обрабатывает следующее как операцию AND:
SELECT Connections.rowid ,firstName ,lastName FROM Connections WHERE Connections MATCH 'occupation:director occupation:sales'
Но это проблематично, если вам нужно объединить это с другими логическими операторами.Например, это не будет работать:
SELECT Connections.rowid ,firstName ,lastName FROM Connections WHERE Connections MATCH 'occupation:sales AND (occupation:manager OR occupation:director)'
Тем не менее, это допустимый запрос, который будет выполняться в «Браузере БД для Sqlite».Все более вероятно, что в Room есть ошибка или это серьезное ограничение дизайна в Room.
Версия Sqlite, запущенная на моем устройстве, - 3.19.4.Это самая последняя версия Sqlite, установленная Android на данный момент.
Но версия, используемая «Браузером БД для Sqlite», - 3.27.2.Возможно, что более новая версия поддерживает логические операторы, но версия, используемая Android, не поддерживает.
К моему полному удивлению, во всем Интернете нет ни одного рабочего примера, который бы даже показывал запрос с использованием нескольких логических значений.операторы с Room.
Если есть что-то, что работает, пожалуйста, дайте мне знать.Спасибо.