[Senna-dev 954] Re: sen_hash_get_key()が失敗しない

Back to archive index

morita morit****@razil*****
2008年 7月 9日 (水) 07:41:50 JST


森です。

こちらは今のところ想定通りの動きです。
存在するはずのIDを指定した場合は必ず0以外の値を返しますが、
存在しないIDを指定した場合の戻り値は不定という感じです。

でもちょっと改善できないか検討します。
このIDはOIDとして機能するものになりますので、
ActiveRecord的なものを作ろうとしたときに不便な気がしてきました。

Kouhei Sutou さんは書きました:
> 須藤です。
>
> 2008/07/07 17:35 morita <morit****@razil*****>:
>   
>> 自動的にエントリを作るのは望ましくないので修正しました。
>> ただし、存在しないIDを指定した場合に0以外の値を返すケースは
>> まだあり得ます。(削除されたkeyに対応するIDを指定された場合など)
>> 完全にこれを抑止しようとすると処理量が増え、実行速度が低下するので
>> 当面このままにします。
>>     
>
> わかりました。
> 「一度でもSEN_TABLE_ADDした状態」も0以外の値を返すケースに
> なるでしょうか?
>
> 以下のプログラムはこういう出力になるかと思ったのですが、
>
>   0:111
>   1
>   0:111
>   4:29
>
> こういう出力になったので、そうなのかなぁと思いました。
>
>   0:111
>   1
>   4:0
>   4:29
>
>
> /* -*- c-file-style: "gnu" -*- */
>
> #include <stdio.h>
>
> #include <hash.h>
>
> int
> main(int argc, char **argv)
> {
>   sen_ctx *context;
>   sen_hash *hash;
>   sen_id exist_id;
>   sen_id nonexistence_id = 999;
>   uint32_t key;
>   uint32_t key_size;
>   int size;
>   sen_table_search_flags flags;
>
>   sen_init();
>
>   key_size = sizeof(uint32_t);
>   context = sen_ctx_open(NULL, SEN_CTX_USEQL);
>   hash = sen_hash_create(context, "/tmp/xxx", key_size, 64, 0, sen_enc_default);
>
>   key = 111;
>   size = sen_hash_get_key(hash, nonexistence_id, &key, key_size);
>   printf("%d:%u\n", size, key);
>
>   key = 29;
>   flags = SEN_TABLE_ADD;
>   exist_id = sen_hash_lookup(hash, &key, key_size, NULL, &flags);
>   printf("%u\n", exist_id);
>
>   key = 111;
>   size = sen_hash_get_key(hash, nonexistence_id, &key, key_size);
>   printf("%d:%u\n", size, key);
>
>   size = sen_hash_get_key(hash, exist_id, &key, key_size);
>   printf("%d:%u\n", size, key);
>
>   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
>
>   




Senna-dev メーリングリストの案内
Back to archive index