<div dir="ltr">確認します!</div><div class="gmail_extra"><br><div class="gmail_quote">2015-04-20 23:00 GMT+09:00 Kouhei Sutou <span dir="ltr">&lt;<a href="mailto:kou****@clear*****" target="_blank">kou****@clear*****</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">須藤です。<br>
<br>
報告ありがとうございます。<br>
<br>
これは、Groongaのパトリシアトライの実装のバグっぽいですね。。。<br>
<br>
森さん、masterにこのケースのテストを追加しておいたので確認し<br>
てもらえませんか?<br>
  <a href="https://github.com/groonga/groonga/blob/master/test/command/suite/tables/patricia_trie/delete.expected" target="_blank">https://github.com/groonga/groonga/blob/master/test/command/suite/tables/patricia_trie/delete.expected</a><br>
<br>
↓を実行すると_grn_pat_del()で<br>
<br>
  % test/command/run-test.sh test/command/suite/tables/patricia_trie/delete.test<br>
<br>
↓というエラーがでるようになります。<br>
<br>
  no delinfo found 3<br>
<br>
これ、&quot;3&quot;というキーを_grn_pat_add()するときが問題な気がする<br>
んですよねぇ。<br>
<br>
個人的には↓かなぁと思うんですが、pat_nodeがterminatedなのっ<br>
てこういう状況のときのことをいうのかよくわかっていません。<br>
<br>
diff --git a/lib/pat.c b/lib/pat.c<br>
index c5dacc0..afa8957 100644<br>
--- a/lib/pat.c<br>
+++ b/lib/pat.c<br>
@@ -667,6 +667,9 @@ _grn_pat_add(grn_ctx *ctx, grn_pat *pat, const uint8_t *key, uint32_t size, uint<br>
       for (c = 0, d = key; min &amp;&amp; *s == *d; c += 16, s++, d++, min--);<br>
       if (min) {<br>
         for (xor = *s ^ *d, mask = 0x80; !(xor &amp; mask); mask &gt;&gt;= 1, c += 2);<br>
+        if (min == 1 &amp;&amp; mask == (0x80 &gt;&gt; 7)) {<br>
+          c++;<br>
+        }<br>
       } else {<br>
         c--;<br>
       }<br>
<br>
<br>
In &lt;<a href="mailto:CAPYqM6xAq0w2%2BQJzovOboQ9O8cu6zTdvkF%2BEmn****@mail*****">CAPYq****@mail*****</a>&gt;<br>
  &quot;[groonga-dev,03177] mroongaで同一レコードの登録、削除、登録を行うとユニークキー重複エラー発生&quot; on Mon, 20 Apr 2015 11:57:15 +0900,<br>
  yuya sako &lt;<a href="mailto:ysgon****@gmail*****">ysgon****@gmail*****</a>&gt; wrote:<br>
<br>
&gt; ※先日、当MLに投稿いたしましたが、過去ログを確認しましたところ、<br>
&gt;  4/19時点で投稿内容が残ってりませんでした為、念のため再投稿させていた<br>
<div><div class="h5">&gt; だきます。<br>
&gt;<br>
&gt; mroongaを使い始めた者なのですが、下記事象が発生いたしました。<br>
&gt; 使い方に問題があるものなのかどうか等、ご教示頂けますと助かります。<br>
&gt;<br>
&gt; お手数をおかけいたしますが、よろしくお願いいたします。<br>
&gt;<br>
&gt; [事象]<br>
&gt; 複数レコードをINSERT<br>
&gt; ↓<br>
&gt; INSERTしたレコードを全てDELETE<br>
&gt; ↓<br>
&gt; 再度同じレコードをINSERT<br>
&gt;<br>
&gt; を行うと、そのうち1件で下記エラーが発生いたします。<br>
&gt;<br>
&gt; ERROR 1062 (23000): Duplicate entry &#39;カラムの値&#39; for key &#39;uid&#39;<br>
&gt;<br>
&gt; ※再現手順を下記に記載いたしました。<br>
&gt;<br>
&gt; [使用環境]<br>
&gt; # uname -a<br>
&gt; Linux localhost1.local 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42<br>
&gt; UTC 2015 x86_64 x86_64 x86_64 GNU/Linux<br>
&gt;<br>
&gt; # mysql --version<br>
&gt; mysql Ver 14.14 Distrib 5.6.23, for Linux (x86_64) using EditLine<br>
&gt; wrapper<br>
&gt;<br>
&gt; mysql&gt; show variables like &#39;%mroonga%&#39;;<br>
&gt; +----------------------------------------+---------------+<br>
&gt; | Variable_name | Value |<br>
&gt; +----------------------------------------+---------------+<br>
&gt; | mroonga_action_on_fulltext_query_error | ERROR_AND_LOG |<br>
&gt; | mroonga_boolean_mode_syntax_flags | DEFAULT |<br>
&gt; | mroonga_database_path_prefix | |<br>
&gt; | mroonga_default_parser | TokenBigram |<br>
&gt; | mroonga_default_wrapper_engine | |<br>
&gt; | mroonga_dry_write | OFF |<br>
&gt; | mroonga_enable_optimization | ON |<br>
&gt; | mroonga_libgroonga_support_lz4 | OFF |<br>
&gt; | mroonga_libgroonga_support_zlib | ON |<br>
&gt; | mroonga_libgroonga_version | 5.0.2 |<br>
&gt; | mroonga_lock_timeout | 10000000 |<br>
&gt; | mroonga_log_file | groonga.log |<br>
&gt; | mroonga_log_level | NOTICE |<br>
&gt; | mroonga_match_escalation_threshold | 0 |<br>
&gt; | mroonga_vector_column_delimiter | |<br>
&gt; | mroonga_version | 5.01 |<br>
&gt; +----------------------------------------+---------------+<br>
&gt;<br>
&gt; [再現手順]<br>
&gt; (1)テーブルの作成<br>
&gt;<br>
&gt; CREATE TABLE `uk_test` (<br>
&gt; id int(10) unsigned not null,<br>
&gt; uid varchar(150) not null,<br>
&gt; data text not null,<br>
&gt; primary key (id),<br>
&gt; unique key uid (uid)<br>
&gt; ) ENGINE=mroonga DEFAULT CHARSET=utf8;<br>
&gt;<br>
&gt; (2)データをINSERT<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (1,&#39;uid2&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (2,&#39;uid1&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (3,&#39;uid3&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (4,&#39;uid4&#39;,&#39;&#39;);<br>
&gt;<br>
&gt; (3)データをDELETE<br>
&gt; DELETE FROM uk_test WHERE `id`=&#39;1&#39;;<br>
&gt; DELETE FROM uk_test WHERE `id`=&#39;2&#39;;<br>
&gt; DELETE FROM uk_test WHERE `id`=&#39;3&#39;;<br>
&gt; DELETE FROM uk_test WHERE `id`=&#39;4&#39;;<br>
&gt;<br>
&gt; (4)上記(2)と同じデータをINSERT<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (1,&#39;uid2&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (2,&#39;uid1&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (3,&#39;uid3&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (4,&#39;uid4&#39;,&#39;&#39;);<br>
&gt;<br>
&gt; [補足-1]<br>
&gt; 上記(2)、(4)で実行するINSER文を下記にしますと、事象が再現しなくなりま<br>
&gt; す。<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (1,&#39;uid1&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (2,&#39;uid2&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (3,&#39;uid3&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (4,&#39;uid4&#39;,&#39;&#39;);<br>
&gt;<br>
&gt; [補足-2]<br>
&gt; 上記(2)、(4)で実行するINSER文は下記3件でも、事象が再現いたします。<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (1,&#39;uid2&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (2,&#39;uid1&#39;,&#39;&#39;);<br>
&gt; INSERT INTO uk_test (id,uid, data) VALUES (3,&#39;uid3&#39;,&#39;&#39;);<br>
&gt;<br>
&gt; 以上よろしくお願いいたします。<br>
&gt;<br>
&gt; -------------------------------------------------<br>
&gt; 酒匂祐也<br>
&gt; <a href="mailto:ysgon****@gmail*****">ysgon****@gmail*****</a><br>
<br>
</div></div>_______________________________________________<br>
groonga-dev mailing list<br>
<a href="mailto:groon****@lists*****">groon****@lists*****</a><br>
<a href="http://lists.sourceforge.jp/mailman/listinfo/groonga-dev" target="_blank">http://lists.sourceforge.jp/mailman/listinfo/groonga-dev</a><br>
</blockquote></div><br></div>