Задать аргументы токенизатора с помощью запроса - PullRequest
0 голосов
/ 03 мая 2019

Я использую пользовательскую сборку Sqlite3 в своем приложении для Android и включаю таблицу FTS с пользовательским токенизатором.Этот токенизатор зависит от аргумента динамической локали.При создании базы данных я обычно передаю этот аргумент при регистрации токенизатора;однако наше приложение позволяет одновременно запускать несколько экземпляров, этот метод не работает, поскольку база данных распознает только первую оригинальную регистрацию.Я хотел бы иметь возможность передать это значение через необработанный запрос, если это возможно, перед выполнением любого запроса, чтобы установить правильное значение токенизатора.Это вообще возможно?

Это мой библиотечный код для регистрации токенизатора (global_locale - это переменная, передаваемая в мою инициализацию токенизатора, и значение должно быть динамическим)

int registerTokenizer(sqlite3 *db, const char *zName, const char *locale) {
int rc;
sqlite3_stmt *pStmt;
const char *zSql = "SELECT fts3_tokenizer(?, ?)";
const sqlite3_tokenizer_module *p = &unicode_module;

rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
if (rc != SQLITE_OK) {
    return rc;
}
global_locale = strdup(locale);
sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC);
sqlite3_step(pStmt);

sqlite3_create_function(db, "ftsrank", -1, SQLITE_ANY, 0, ftsRankFunc, 0, 0);

return sqlite3_finalize(pStmt);

}

...