[Groonga-commit] groonga/groonga at 0520df8 [master] expr: add support for constant vector

Back to archive index
Kouhei Sutou null+****@clear*****
Sat Apr 20 08:57:03 JST 2019


Kouhei Sutou	2019-04-20 08:57:03 +0900 (Sat, 20 Apr 2019)

  Revision: 0520df8c4015fc6facd139cb80086edd88b80c8b
  https://github.com/groonga/groonga/commit/0520df8c4015fc6facd139cb80086edd88b80c8b

  Message:
    expr: add support for constant vector

  Modified files:
    lib/expr.c

  Modified: lib/expr.c (+24 -0)
===================================================================
--- lib/expr.c    2019-04-20 08:56:46 +0900 (143795d22)
+++ lib/expr.c    2019-04-20 08:57:03 +0900 (c6c9c17e4)
@@ -1074,6 +1074,7 @@ grn_expr_append_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op,
             /* todo */
           } else {
             if (xd != yd &&
+                grn_obj_is_bulk(ctx, x) &&
                 !(grn_type_id_is_number_family(ctx, xd) &&
                   grn_type_id_is_number_family(ctx, yd))) {
               grn_expr_append_obj_resolve_const(ctx, x, yd);
@@ -1082,6 +1083,7 @@ grn_expr_append_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op,
         } else {
           if (CONSTP(y)) {
             if (xd != yd &&
+                grn_obj_is_bulk(ctx, y) &&
                 !(grn_type_id_is_number_family(ctx, xd) &&
                   grn_type_id_is_number_family(ctx, yd))) {
               grn_expr_append_obj_resolve_const(ctx, y, xd);
@@ -1379,6 +1381,28 @@ grn_expr_append_const(grn_ctx *ctx, grn_obj *expr, grn_obj *obj,
         GRN_OBJ_INIT(res, obj->header.type, 0, obj->header.domain);
         grn_bulk_write(ctx, res, GRN_BULK_HEAD(obj), GRN_BULK_VSIZE(obj));
         break;
+      case GRN_VECTOR :
+        GRN_OBJ_INIT(res, obj->header.type, 0, obj->header.domain);
+        unsigned int n = grn_vector_size(ctx, obj);
+        for (unsigned int i = 0; i < n; i++) {
+          const char *content;
+          unsigned int content_length;
+          unsigned int weight;
+          grn_id domain;
+          content_length = grn_vector_get_element(ctx,
+                                                  obj,
+                                                  i,
+                                                  &content,
+                                                  &weight,
+                                                  &domain);
+          grn_vector_add_element(ctx,
+                                 res,
+                                 content,
+                                 content_length,
+                                 weight,
+                                 domain);
+        }
+        break;
       default :
         res = NULL;
         ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "unsupported type");
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20190420/0f5b20a3/attachment-0001.html>


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