[groonga-dev,00208] Re: 末尾に:をもつ項が最初にあるクエリでSEGVする

Back to archive index

Kouhei Sutou kou****@clear*****
2009年 9月 22日 (火) 19:10:59 JST


須藤です。

In <20090****@epepe*****>
  "[groonga-dev,00203] Re: 末尾に:をもつ項が最初にあるクエリでSEGVする" on Tue, 22 Sep 2009 14:54:35 +0900,
  morit****@razil***** wrote:

> なお、grn_expr_parse()関数のparse_level引数に、2〜3を指定したときに限り、
> 
>   カラム名:値
> 
> のような文字列を、カラム検索条件として解釈するようにしました。
> 
> したがって、
> 
>  "photo:"
> 
> のようなクエリは以下のように解釈されます。
> 
> parse_levelに0〜1を指定した場合:
> 
>  単なる文字列として解釈されます。
> 
> parse_levelに2〜3を指定した場合:
> 
>  "photo"という名前のカラムに対する検索条件として解釈されます。
>  名前に一致するカラムが存在しない場合はエラーが返ります。

実は、parse_levelという名前に違和感があったのですが、やっぱり、
levelじゃないと思うんです。

levelだと互換性を保ちながら段階的に新しい機能が追加されてい
くイメージがあるのですが、1 -> 2に変わったときは、既存の文法
の意味が変わってしまうので互換性がありませんよね。たぶん、そ
こが違和感の原因だと思います。


ということで、parse_levelをparserにするのはどうでしょうか?
(内部的にはparserじゃなくてlexerかと思いますが)
例えば、こんな感じです。

  * parse_level: 0-1: → GRN_EXPR_PARSER_COLUMN_QUERY
  * parse_level: 2-3: → GRN_EXPR_PARSER_TABLE_QUERY
  * parse_level: 4:   → GRN_EXPR_PARSER_EXPRESSION

4はexpressionよりlanguageの方がよいかもしれませんが、イメー
ジはこんな感じです。

どんなもんでしょうか?

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード (http://www.clear-code.com/)




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