7.26.11. grn_expr#
grn_expr is an grn_obj that represents an expression. Here
is a list of what expression can do:
Expression can apply some operations to a record by
grn_expr_exec().
Expression can represents search condition.
grn_table_select()can select records that match against the search condition represented by expression.
There are two string representations of expression:
grn_expr_parse() parses string represented expression and
appends the parsed expression to another expression.
7.26.11.1. Example#
TODO…
7.26.11.2. Reference#
- 
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 - 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.- Here is an example code: - 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); - Parameters:
- 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.
 
- Returns:
- GRN_SUCCESSon success, not- GRN_SUCCESSon error.
 
- 
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)#
- Escapes - target_charactersin- stringby- escape_character.- Parameters:
- ctx – Its encoding must be the same encoding of - string. It is used for allocating buffer for- escaped_string.
- string – String expression representation. 
- string_size – The byte size of - string.- -1means- stringis NULL terminated string.
- target_characters – NULL terminated escape target characters. For example, - "+-><~*()\"\\:"is- target_charactersfor Query syntax.
- escape_character – The character to use escape a character in - target_characters. For example,- \\(backslash) is- escaped_characterfor Query syntax.
- escaped_string – The output of escaped - string. It should be text typed bulk.
 
- Returns:
- GRN_SUCCESSon success, not- GRN_SUCCESSon error.
 
- 
grn_rc grn_expr_syntax_escape_query(grn_ctx *ctx, const char *query, int query_size, grn_obj *escaped_query)#
- Escapes special characters in Query syntax. - Parameters:
- ctx – Its encoding must be the same encoding of - query. It is used for allocating buffer for- escaped_query.
- query – String expression representation in Query syntax. 
- query_size – The byte size of - query.- -1means- queryis NULL terminated string.
- escaped_query – The output of escaped - query. It should be text typed bulk.
 
- Returns:
- GRN_SUCCESSon success, not- GRN_SUCCESSon error.
 
- 
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)#
