Оператор sqlite match
На Android я хотел бы использовать запрос, подобный этому:
SELECT docid FROM docs WHERE docs MATCH '("sqlite database" OR "sqlite library") AND linux'
http://www.sqlite.org/fts3.html
Проблема в том, что я получил "неправильное выражение выражения". Когда я делаю более простой запрос на совпадение, он работает, и кажется, что проблема может быть из-за скобок.
Когда я использую точно такой же оператор (кроме таблицы имя столбца), ошибка та же.
Полное сообщение об ошибке:
sqlite вернул: код ошибки = 1, msg = оператор прерывается на 7:
[SELECT * FROM namedays ГДЕ имена MATCH '("база данных sqlite" ИЛИ "библиотека sqlite") И linux';]
искаженное выражение MATCH: [("база данных sqlite" ИЛИ "библиотека sqlite") И linux], db=/data/data/org.xyz/database / data
Любая идея?
1 ответ
Решение
Я считаю, что у вас нет SQLite, скомпилированного с параметром SQLITE_ENABLE_FTS3_PARENTHESIS. Таким образом, вы можете использовать только стандартный синтаксис запроса, а не расширенный синтаксис запроса
Вы можете легко проверить это, выполнив compile_options
прагма Например, мы видим, что мой sqlite3 не имеет расширенного синтаксиса:
sqlite> PRAGMA compile_options;
DISABLE_DIRSYNC
ENABLE_COLUMN_METADATA
ENABLE_FTS3
ENABLE_RTREE
ENABLE_UNLOCK_NOTIFY
SECURE_DELETE
TEMP_STORE=1
THREADSAFE=1