2013-05-08 147 views
0

我正在使用sqlite3_create_function_v2来定义一个ngram函数。sqlite3_create_function_v2中的步骤错误

在这种情况下,该步骤被用作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); 

的SqliteExtension代码,测试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调用select * from tbl_lista where ngram(id, "Asd", 3) > 1

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

回答

0

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