morita
morit****@razil*****
2008年 7月 24日 (木) 07:17:49 JST
森です。 ありがとうございます!修正しました。(delete失敗時の戻り値も) Kouhei Sutou さんは書きました: > 須藤です。 > > SEN_PAT_WITH_SIS指定のsen_patでは同じIDで2回以上 > sen_pat_delete_by_id()をしてもsen_successが返ってくる > ことがあるようです。これは意図した挙動でしょうか? > 2回目以降は存在しないIDを削除することになるので > sen_invalid_argumentかなぁと思いました。 > > 最後のプログラムの実行結果: > min: (null); max: (null); direction: ASCENDING; GT: FALSE; LT: FALSE > Senna > セ > セナ > セナ + Ruby > セナセ > セナセナ > ナ > ナ + Ruby > ナセ > ナセナ > ナセナセ > > sen_pat_delete_by_id() result: 0 > sen_pat_delete_by_id() result: 0 > min: (null); max: (null); direction: ASCENDING; GT: FALSE; LT: FALSE > Senna > セ > セナ + Ruby > セナセ > ナ + Ruby > ナセ > ナセナセ > > sen_pat_delete_by_id() result: 0 > > テストプログラム: > #include <stdio.h> > #include <string.h> > > #include <pat.h> > > static sen_id > add(sen_ctx *context, sen_pat *pat, const char *key) > { > sen_table_search_flags flags; > > flags = SEN_TABLE_ADD; > return sen_pat_lookup(context, pat, key, strlen(key) + 1, NULL, &flags); > } > > #define BUFFER_SIZE 4096 > > static void > dump(sen_ctx *context, sen_pat *pat, const char *min, const char > *max, int flags) > { > sen_id id; > sen_pat_cursor *cursor; > > printf("min: %s; max: %s; direction: %s; GT: %s; LT: %s\n", > min ? min : "(null)", > max ? max : "(null)", > flags & SEN_PAT_ASCENDING ? "ASCENDING" : "DESCENDING", > flags & SEN_PAT_GT ? "TRUE" : "FALSE", > flags & SEN_PAT_LT ? "TRUE" : "FALSE"); > > cursor = sen_pat_cursor_open(context, pat, > min, min ? strlen(min) + 1 : 0, > max, max ? strlen(max) + 1 : 0, > flags); > > id = sen_pat_cursor_next(context, cursor); > while (id != SEN_ID_NIL) { > char buffer[BUFFER_SIZE]; > sen_pat_get_key(context, pat, id, buffer, BUFFER_SIZE - 1); > printf("%s\n", buffer); > id = sen_pat_cursor_next(context, cursor); > } > > printf("\n"); > > sen_pat_cursor_close(context, cursor); > } > > int > main(int argc, char **argv) > { > sen_ctx *context; > sen_pat *pat; > sen_id id; > > sen_init(); > > context = sen_ctx_open(NULL, SEN_CTX_USEQL); > pat = sen_pat_create(context, "/tmp/xxx", 128, 64, > SEN_PAT_WITH_SIS, sen_enc_utf8); > > add(context, pat, "セナ"); > add(context, pat, "ナセナセ"); > add(context, pat, "Senna"); > add(context, pat, "セナ + Ruby"); > id = add(context, pat, "セナセナ"); > > dump(context, pat, NULL, NULL, SEN_PAT_ASCENDING); > printf("sen_pat_delete_by_id() result: %d\n", > sen_pat_delete_by_id(context, pat, id)); > printf("sen_pat_delete_by_id() result: %d\n", > sen_pat_delete_by_id(context, pat, id)); > dump(context, pat, NULL, NULL, SEN_PAT_ASCENDING); > printf("sen_pat_delete_by_id() result: %d\n", > sen_pat_delete_by_id(context, pat, id)); > > sen_pat_close(context, pat); > sen_ctx_close(context); > > sen_fin(); > > return 0; > } > > _______________________________________________ > Senna-dev mailing list > Senna****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > バグ報告方法:http://qwik.jp/senna/bug_report.html >