7.18.9. grn_expr¶
`grn_expr`は:c:type:`grn_obj`を式として表現したものです。以下はどのような表現があるかのリストです。
文字列を式で表現する手段は2種類あります。
:c:func:`grn_expr_parse`は式の記述された文字列をパースし、その結果を別の式に追加します。
7.18.9.1. 実行例:¶
TODO...
7.18.9.2. リファレンス¶
-
GRN_API grn_obj *
grn_expr_add_var
(grn_ctx *ctx, grn_obj *expr, const char *name, unsigned int name_size)¶
-
GRN_API grn_obj *grn_expr_append_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op, int nargs);
-
GRN_API grn_obj *
grn_expr_append_const
(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op, int nargs)¶
-
GRN_API 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_API grn_obj *
grn_expr_append_const_int
(grn_ctx *ctx, grn_obj *expr, int i, 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 tokeywords
. Keywords inkeywords
are owned byexpr
. Don't unlink them. Each keyword isGRN_BULK
and its domain isGRN_DB_TEXT
.keywords
must beGRN_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 isGRN_DB_TEXT
.Extracted keywords are owned by
expr
. Don't unlink them.
戻り値: 成功時は
GRN_SUCCESS
、エラー時はGRN_SUCCESS
以外。- ctx -- The context that creates the
-
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_characters``は``escape_character``によってエスケープされます。
パラメタ: - ctx -- エンコーディングは``string``と同じでなければいけません。``escaped_string``のバッファ確保のために利用されます。
- string -- 文字列式表現
- string_size --
string``のバイトサイズが
-1``の場合は``string``がNULL終端文字列であることを意味しています。 - target_characters -- NULL終端されたエスケープ対象文字。たとえば、``"+-><~*()"\:"は``target_characters``と:doc:/reference/grn_expr/query_syntax`で説明されています。
- escape_character -- エスケープ用の文字として``target_characters``に指定するもの。たとえば、
\\
が``escaped_character``として:doc:`/reference/grn_expr/query_syntax`に説明されています。 - escaped_string -- エスケープされた``string``の出力。テキスト型用のbulkに使用されます。
戻り値: 成功時は
GRN_SUCCESS
、エラー時はGRN_SUCCESS
以外。