我正在使用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);
用于测试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 call select * from tbl_lista where ngram(id, "Asd", 3) > 1
第一个参数是列,第二个是比较每列的文本,第三个是N参数
答案 0 :(得分:0)
我“解决了”我的问题。 这不是一个问题,只有step / finaize用于agregate函数,我需要运行所有行来返回finalize上的一个数据。 ngram适用于每一行,因此这种方法不起作用。