mail_babir****@yahoo*****
mail_babir****@yahoo*****
2013年 7月 18日 (木) 07:19:28 JST
田辺です。
ご返信遅れましてすみません。
> >> 3. エラーが起きてもクライアントに報告せず、ログを出力する
> >> だけにするモードを用意する
> >> (結果は0件になる。)
> >> (変数で挙動を変えられるようにする。)
実装ありがとうございます。
> 「\」の次の文字は特殊な文字かどうかに関わらずそのものとして
> 解釈するようにしました。
>
> \\ -> \
> \A -> A
> \( -> (
> ...
>
> これで、期待した動作になっていますか?
期待した動作になっていると思います。
> ただ、SQLで書くときは
>
> AGAINST("\\\\")
>
> となることに注意してください。
>
> これは、
>
> "\\\\"
>
> を文字列リテラルと解釈するときに*MySQLが*「\\」を「\」に変換
> するためです。
>
> "\\\\"
> ↓ MySQLが文字列リテラルとして解釈
> \\ (groongaのクエリーパーサーに渡る文字列)
> ↓ groongaがクエリーとして解釈(今回の変更)
> \
この点が気になります。
Mysqlの場合、バックスラッシュ単体は無視される(\xはただのxとなる)ようなので、今回のエスケープ処理を実際にSQLで書く場合は
\\\\ -> \
\\A -> A
\\( -> (
となるということでしょうか?
この実装になっているとすると、実質二重エスケープのような記述になってしまうので、見た目にわかりにくいのではないかと思うのです。
(これまでの""で括る方法の方がわかりやすいかもしれない)
問題点としてはMysqlと同じエスケープ文字をgroongaでのエスケープでも使用しているというところかと思います。
Mysqlと別の文字をエスケープに使用する方向で調整することは難しいでしょうか?
実装された後で申し訳ないですが、ご検討のほどよろしくお願いします。
田辺公平