Kouhei Sutou
null+****@clear*****
Wed Oct 8 21:39:26 JST 2014
Kouhei Sutou 2014-10-08 21:39:26 +0900 (Wed, 08 Oct 2014) New Revision: 2d3059382fbe571235b068d70973c067184b2eea https://github.com/groonga/groonga/commit/2d3059382fbe571235b068d70973c067184b2eea Message: Export grn_expr_get_keywords() Modified files: doc/source/reference/api/grn_expr.rst include/groonga.h lib/expr.h Modified: doc/source/reference/api/grn_expr.rst (+46 -1) =================================================================== --- doc/source/reference/api/grn_expr.rst 2014-10-08 11:01:12 +0900 (dd0b94d) +++ doc/source/reference/api/grn_expr.rst 2014-10-08 21:39:26 +0900 (064304e) @@ -1,6 +1,6 @@ .. -*- rst -*- -.. highlightlang:: none +.. highlightlang:: c grn_expr ======== @@ -48,6 +48,51 @@ Reference .. c:function:: GRN_API grn_rc grn_expr_append_op(grn_ctx *ctx, grn_obj *expr, grn_operator op, int nargs) +.. c:function:: 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``. + + 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); + + + :param ctx: The context that creates the ``expr``. + :param expr: The expression to be extracted. + :param 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. + :return: ``GRN_SUCCESS`` on success, not ``GRN_SUCCESS`` on error. + .. c:function:: 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_characters`` in ``string`` by ``escape_character``. Modified: include/groonga.h (+2 -0) =================================================================== --- include/groonga.h 2014-10-08 11:01:12 +0900 (5796eca) +++ include/groonga.h 2014-10-08 21:39:26 +0900 (d1cf1e2) @@ -1695,6 +1695,8 @@ GRN_API grn_obj *grn_expr_append_const_int(grn_ctx *ctx, grn_obj *expr, int i, grn_operator op, int nargs); GRN_API grn_rc grn_expr_append_op(grn_ctx *ctx, grn_obj *expr, grn_operator op, int nargs); +GRN_API grn_rc grn_expr_get_keywords(grn_ctx *ctx, grn_obj *expr, grn_obj *keywords); + GRN_API grn_rc grn_expr_syntax_escape(grn_ctx *ctx, const char *query, int query_size, const char *target_characters, Modified: lib/expr.h (+0 -1) =================================================================== --- lib/expr.h 2014-10-08 11:01:12 +0900 (a319400) +++ lib/expr.h 2014-10-08 21:39:26 +0900 (67e134e) @@ -63,7 +63,6 @@ grn_bool grn_scan_info_push_arg(scan_info *si, grn_obj *arg); grn_obj *grn_scan_info_get_arg(grn_ctx *ctx, scan_info *si, int i); int32_t grn_expr_code_get_weight(grn_ctx *ctx, grn_expr_code *ec); -grn_rc grn_expr_get_keywords(grn_ctx *ctx, grn_obj *expr, grn_obj *keywords); void grn_expr_take_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj); grn_obj *grn_expr_alloc_const(grn_ctx *ctx, grn_obj *expr); -------------- next part -------------- HTML����������������������������...Download