須藤です。 おまたせしました。ようやく直しました。 今月末のリリースにはこの修正が含まれます。 In <d5608****@ksw*****> "[groonga-dev,04887] Mroongaバグ報告(8)" on Wed, 8 Sep 2021 09:45:25 +0900, 渡部克仁 <watan****@ksw*****> wrote: > 【秘密】関係者外秘 > To:堀本様 > > 渡部@国際ソフトウェアと申します。 > > 下記バグについて、今後の対応計画などはありますでしょうか。 > > 2021-07-30にリリースされたMroonga 11.05、 > 2021-08-29にリリースされたMroonga 11.06、 > 共にリリースノートを拝見しましたが、該当する改良が見当たら > なかったため、確認させていただいている次第です。 > > 以上、よろしくお願いいたします。 > > > On 2021/07/07 12:13, 渡部克仁 wrote: >> 【秘密】関係者外秘 >> To:堀本様 >> 渡部@国際ソフトウェアと申します。 >> ご報告ありがとうございます。 >> 原因が判明して安堵いたしました。 >> ご丁寧に調査いただき感謝申し上げます。 >> Mroongaの修正については、引き続きご対応よろしくお願いいたします。 >> On 2021/07/07 12:00, groon****@lists***** wrote: >>> groonga-dev >>> メーリングリストへの投稿は以下のアドレスに送ってください. >>> >>> groon****@lists***** >>> >>> Webブラウザを使って入退会するには以下のURLにどうぞ. >>> >>> https://lists.osdn.me/mailman/listinfo/groonga-dev >>> メールを使う場合,件名(Subject:)または本文に help >>> と書いて以下の アドレスに送信してください. >>> groon****@lists***** >>> >>> メーリングリストの管理者への連絡は,以下のアドレスにお願いします. >>> >>> groon****@lists***** >>> >>> 返信する場合,件名を書き直して内容がわかるようにしてください. >>> そのままだと,以下のようになってしまいます. >>> "Re: groonga-dev まとめ読み, XX 巻 XX 号" >>> >>> >>> 本日の話題: >>> >>> 1. [groonga-dev,04876] Re: Mroongaバグ報告(6) (Horimoto Yasuhiro) >>> >>> >>> > ---------------------------------------------------------------------- >>> >>> Message: 1 >>> Date: Tue, 06 Jul 2021 16:28:20 +0900 (JST) >>> From: Horimoto Yasuhiro <horim****@clear*****> >>> To: groon****@lists***** >>> Subject: [groonga-dev,04876] Re: Mroongaバグ報告(6) >>> Message-ID: >>> <20210****@clear*****> >>> Content-Type: Text/Plain; charset=utf-8 >>> >>> 堀本です。 >>> >>> 原因と対処方法がわかったので、報告いたします。 >>> 原因はMroongaのバグでした。 >>> >>> 以下の提示いただいたクエリーを実行した際 >>> MariaDBのオプティマイザーは、IN句内のサブクエリーを実行した結果のテー >>> ブルと >>> IN句の外側のテーブル(Posts)テーブルをSEMI JOINで結合します。 >>> >>> SELECT Id, ChannelId, RootId >>> FROM Posts p3 >>> WHERE Id IN ( >>> SELECT * FROM >>> (SELECT RootId >>> FROM Posts >>> WHERE UpdateAt > 1617352409099 AND >>> ChannelId = 'i9rsh6im4ffepfpdgm51hjze3a' >>> LIMIT 1000) >>> temp_tab); >>> >>> IN句の中のサブクエリーの結果は以下のようになり、 >>> 以下の表の値と、Posts.Idの値が同じレコードを抽出します。 >>> >>> つまり、''(空文字)と"twn3smcaei8wjbqsm8bcmo8qah"と一致する >>> Posts.Idを持つレコードを抽出します。 >>> >>> +----------------------------+ >>> | RootId | >>> +----------------------------+ >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | twn3smcaei8wjbqsm8bcmo8qah | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> | | >>> +----------------------------+ >>> 20 rows in set (0.001 sec) >>> >>> この時、Mroongaを使用していると、''と一致するレコードとして >>> 任意のIDを持つレコードを抽出してしまい、意図しないIDのレコードが結果に >>> 含まれてしまいます。 >>> InnoDBでは、再現しないため、Mroonga特有の問題です。 >>> >>> Mroongaを修正しますが、さしあたっては以下の対処方法で >>> 正しい結果が得られます。 >>> >>> 今回の問題は、''のような空文字のレコードを持つ表との結合 >>> で発生します。したがって、''のようなレコードが含まれないように >>> することで現象の発生を防げます。 >>> >>> RootIdはIdと比較しており、IdはNOT NULL属性なので、RootIdが''なレコード >>> は除外しても問題ないと考えます。 >>> >>> そのため、問題のクエリーのIN句の中のサブクエリーに >>> 以下のように、RootId <> ''を追加してRootIdが''なレコードを除外します。 >>> このようにすることで、期待する結果が得られます。 >>> >>> SELECT Id, ChannelId, RootId >>> FROM Posts p3 >>> WHERE Id IN ( >>> SELECT * FROM >>> (SELECT RootId >>> FROM Posts >>> WHERE UpdateAt > 1617352409099 AND >>> ChannelId = 'i9rsh6im4ffepfpdgm51hjze3a' AND >>> RootId <> '' >>> LIMIT 1000) >>> temp_tab); >>> >>> Mroongaの修正が完了しましたら、また改めて連絡します。 >>> >>> 以上です。失礼いたします。 >>> > > _______________________________________________ > groonga-dev mailing list > groon****@lists***** > https://lists.osdn.me/mailman/listinfo/groonga-dev