在sqlite3_create_function_v2中出现步进错误

Step error in sqlite3_create_function_v2

本文关键字:步进 错误 v2 sqlite3 create function      更新时间:2023-10-16

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

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

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

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

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

SqliteExtension Code,用于测试NGRAM尚未实现

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 call select * from tbl_lista where ngram(id, "Asd", 3) > 1

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

我"解决"了我的问题。这不是问题,只有步骤/finalize是用于聚合函数,我需要运行所有行以返回finalize上的一个数据。ngram是针对每一行的,所以这种方法不起作用。