通过查询设置令牌生成器参数

时间:2019-05-03 16:42:04

标签: android sqlite android-sqlite tokenize

我在我的android应用程序中使用了自定义Sqlite3构建,并且包括带有自定义标记器的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);

}

0 个答案:

没有答案