7.25.11. grn_expr

grn_expr は「式」を表現した grn_obj です。以下は式が何をできるかのリストです。

  • 式は grn_expr_exec() を使うと1つのレコードに複数の操作を適用できます。

  • 式は検索条件を表現できます。 grn_table_select() を使うと、式で表現した検索条件にマッチしたレコードだけを選択できます。

文字列を式で表現する手段は2種類あります。

grn_expr_parse() は式の文字列表現をパースし、パースした式を別の式に追加します。

7.25.11.1.

TODO...

7.25.11.2. リファレンス

grn_obj *grn_expr_create(grn_ctx *ctx, const char *name, unsigned int name_size)
grn_rc grn_expr_close(grn_ctx *ctx, grn_obj *expr)
grn_obj *grn_expr_add_var(grn_ctx *ctx, grn_obj *expr, const char *name, unsigned int name_size)
grn_obj *grn_expr_get_var_by_offset(grn_ctx *ctx, grn_obj *expr, unsigned int offset)
grn_obj *grn_expr_append_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op, int nargs)
grn_obj *grn_expr_append_const(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op, int nargs)
grn_obj *grn_expr_append_const_str(grn_ctx *ctx, grn_obj *expr, const char *str, unsigned int str_size, grn_operator op, int nargs)
grn_obj *grn_expr_append_const_int(grn_ctx *ctx, grn_obj *expr, int i, grn_operator op, int nargs)
grn_rc grn_expr_append_op(grn_ctx *ctx, grn_obj *expr, grn_operator op, int nargs)
grn_rc grn_expr_get_keywords(grn_ctx *ctx, grn_obj *expr, grn_obj *keywords)

Extracts keywords from expr and stores to keywords. Keywords in keywords are owned by expr. Don't unlink them. Each keyword is GRN_BULK and its domain is GRN_DB_TEXT.

keywords must be GRN_PVECTOR.

以下はスキーマの例です。

grn_obj keywords;
GRN_PTR_INIT(&keywords, GRN_OBJ_VECTOR, GRN_ID_NIL);
grn_expr_get_keywords(ctx, expr, &keywords);
{
  int i, n_keywords;
  n_keywords = GRN_BULK_VSIZE(&keywords) / sizeof(grn_obj *);
  for (i = 0; i < n_keywords; i++) {
    grn_obj *keyword = GRN_PTR_VALUE_AT(&keywords, i);
    const char *keyword_content;
    int keyword_size;
    keyword_content = GRN_TEXT_VALUE(keyword);
    keyword_size = GRN_TEXT_LEN(keyword);
    /*
      Use keyword_content and keyword_size.
      You don't need to unlink keyword.
      keyword is owned by expr.
    */
  }
}
GRN_OBJ_FIN(ctx, &keywords);
パラメータ:
  • ctx -- The context that creates the expr.

  • expr -- The expression to be extracted.

  • keywords --

    The container to store extracted keywords. It must be GRN_PVECTOR.

    Each extracted keyword is GRN_BULK and its domain is GRN_DB_TEXT.

    Extracted keywords are owned by expr. Don't unlink them.

戻り値:

成功時は GRN_SUCCESS 、エラー時は GRN_SUCCESS 以外。

grn_rc grn_expr_syntax_escape(grn_ctx *ctx, const char *string, int string_size, const char *target_characters, char escape_character, grn_obj *escaped_string)

string 中の target_charactersescape_character でエスケープします。

パラメータ:
  • ctx -- エンコーディングは string と同じでなければいけません。 escaped_string 用のバッファを確保するために使います。

  • string -- 文字列式表現

  • string_size -- string のバイトサイズです。 -1 を指定した場合は string がNULL終端文字列であるという意味になります。

  • target_characters -- NULL終端されたエスケープ対象文字。たとえば、 クエリー構文 用の target_characters"+-><~*()\"\\:" になります。

  • escape_character -- target_characters の文字をエスケープする文字です。たとえば、 クエリー構文 用の escaped_character\\ (バックスラッシュ)になります。

  • escaped_string -- エスケープされた string の出力先です。テキスト型のbulkでなければいけません。

戻り値:

成功時は GRN_SUCCESS 、エラー時は GRN_SUCCESS 以外。

grn_rc grn_expr_syntax_escape_query(grn_ctx *ctx, const char *query, int query_size, grn_obj *escaped_query)

クエリー構文 にある特別な文字をエスケープします。

パラメータ:
  • ctx -- このエンコーディングは query のエンコーディングと同じでなければなりません。 escaped_query 用のバッファを確保するために使います。

  • query -- クエリー構文 にある文字列式の表現。

  • query_size -- query のバイトサイズです。 -1 を指定した場合は query がNULL終端文字列であるという意味になります。

  • escaped_query -- エスケープされた query の出力。テキスト型用のbulkを返す。

戻り値:

成功時は GRN_SUCCESS 、エラー時は GRN_SUCCESS 以外。

grn_rc grn_expr_compile(grn_ctx *ctx, grn_obj *expr)
grn_obj *grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
grn_obj *grn_expr_alloc(grn_ctx *ctx, grn_obj *expr, grn_id domain, grn_obj_flags flags)