0

我正在使用 sqlite3_create_function_v2 来定义一个 ngram 函数。

在这种情况下,步骤被用作 xFunc 指针,它作为一个魅力,步骤和 xFunc 的签名是相同的。

sqlite3_create_function_v2(this->connection, "ngram", 3, SQLITE_ANY, NULL, SqliteExtension::stepExtendNGram, NULL, NULL, NULL);

当我尝试将该步骤用作它编译的步骤时,但是当我使用 ngram 执行命令时,它在准备语句中失败。

sqlite3_create_function_v2(this->connection, "ngram", 3, SQLITE_ANY, NULL, NULL, SqliteExtension::stepExtendNGram, SqliteExtension::finalExtendNGram, NULL);

用于测试 NGRAM 的 SqliteExtension 代码尚未实现

void SqliteExtension::stepExtendNGram(sqlite3_context *ctx, int nArg, sqlite3_value ** val){
    //3 PARAMS
    std::cout << "P1 " << sqlite3_value_text(val[0]) << " P2 " << sqlite3_value_text(val[1]) << std::endl;
    sqlite3_result_int(ctx, atoi((const char*) sqlite3_value_text(val[0])));

}

void SqliteExtension::finalExtendNGram(sqlite3_context *ctx){
}

sql调用select * from tbl_lista where ngram(id, "Asd", 3) > 1

第一个参数是列,第二个是要比较每一列的文本,第三个是N个参数

4

1 回答 1

0

我“解决了”我的问题。这不是问题,只有 step/finaize 用于聚合函数,我需要在所有行中运行以在 finalize 上返回一个数据。ngram 适用于每一行,因此这种方法不起作用。

于 2013-05-08T13:29:29.867 回答