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 でコマンドを実行すると、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 呼び出しselect * from tbl_lista where ngram(id, "Asd", 3) > 1

最初のパラメータは列、2 番目は各列を比較するテキスト、3 番目は N パラメータです。

4

1 に答える 1