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_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 - exprand stores to- keywords. Keywords in- keywordsare owned by- expr. Don't unlink them. Each keyword is- GRN_BULKand its domain is- GRN_DB_TEXT.- keywordsmust 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_BULKand 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_charactersを- escape_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以外。