Kouhei Sutou
kou****@clear*****
2013年 7月 19日 (金) 22:30:50 JST
須藤です。 In <68746****@web10*****> "[groonga-dev,01537] Re: 特殊記号混じりの前方一致検索について" on Thu, 18 Jul 2013 07:19:28 +0900 (JST), <mail_babir****@yahoo*****> wrote: >> 「\」の次の文字は特殊な文字かどうかに関わらずそのものとして >> 解釈するようにしました。 >> >> \\ -> \ >> \A -> A >> \( -> ( >> ... >> >> これで、期待した動作になっていますか? > > 期待した動作になっていると思います。 よかったです! >> ただ、SQLで書くときは >> >> AGAINST("\\\\") >> >> となることに注意してください。 >> >> これは、 >> >> "\\\\" >> >> を文字列リテラルと解釈するときに*MySQLが*「\\」を「\」に変換 >> するためです。 >> >> "\\\\" >> ↓ MySQLが文字列リテラルとして解釈 >> \\ (groongaのクエリーパーサーに渡る文字列) >> ↓ groongaがクエリーとして解釈(今回の変更) >> \ > > この点が気になります。 > > Mysqlの場合、バックスラッシュ単体は無視される(\xはただのxとなる)ようなので、今回のエスケープ処理を実際にSQLで書く場合は > \\\\ -> \ > \\A -> A > \\( -> ( > となるということでしょうか? はい、そうです。 微妙ですかねぇ。。。 > この実装になっているとすると、実質二重エスケープのような記述になってしまうので、見た目にわかりにくいのではないかと思うのです。 そうですね、理解できます。 > 問題点としてはMysqlと同じエスケープ文字をgroongaでのエスケープでも使用しているというところかと思います。 > Mysqlと別の文字をエスケープに使用する方向で調整することは難しいでしょうか? なるほど。 とすると、どの文字を使うのがよいかということになりますね。エ スケープ文字としてよく使われているやつがいいですねぇ、やっぱ り。C言語のprintf()だと%をエスケープ文字というか特殊な文字と してつかっていますが、SQLで%がでてくるとLIKEの%みたいで紛ら わしいですよねぇ。。。 うーん。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html