[Groonga-commit] groonga/groonga at 2d30593 [master] Export grn_expr_get_keywords()

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index