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
>