[Groonga-commit] groonga/groonga at 5c063fd [master] mrb: implement resolving index of accessor in expr on match by mruby

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Jun 9 23:20:17 JST 2014


Kouhei Sutou	2014-06-09 23:20:17 +0900 (Mon, 09 Jun 2014)

  New Revision: 5c063fd648de49c68b9340943eb5f85242ff0837
  https://github.com/groonga/groonga/commit/5c063fd648de49c68b9340943eb5f85242ff0837

  Message:
    mrb: implement resolving index of accessor in expr on match by mruby

  Modified files:
    lib/mrb/mrb_expr.c
    lib/mrb/scripts/scan_info.rb

  Modified: lib/mrb/mrb_expr.c (+6 -15)
===================================================================
--- lib/mrb/mrb_expr.c    2014-06-09 23:05:43 +0900 (1eb46d4)
+++ lib/mrb/mrb_expr.c    2014-06-09 23:20:17 +0900 (bd09a41)
@@ -181,23 +181,14 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
               if (ec->value) {
                 switch (ec->value->header.type) {
                 case GRN_ACCESSOR :
-                  if (grn_column_index(ctx, ec->value, c->op, &index, 1, &sid)) {
-                    mrb_value mrb_ec = mrb_grn_expr_code_new(mrb, ec);
+                  {
                     mrb_value mrb_accessor;
-                    weight = mrb_fixnum(mrb_funcall(mrb, mrb_ec, "weight", 0));
-                    grn_scan_info_set_flags(si, grn_scan_info_get_flags(si) | SCAN_ACCESSOR);
+                    mrb_value mrb_ec;
+
                     mrb_accessor = grn_mrb_value_from_grn_obj(mrb, ec->value);
-                    if (!mrb_nil_p(mrb_funcall(mrb, mrb_accessor, "next", 0))) {
-                      mrb_funcall(mrb, mrb_si, "put_index", 3,
-                                  grn_mrb_value_from_grn_obj(mrb, ec->value),
-                                  mrb_fixnum_value(sid),
-                                  mrb_fixnum_value(weight));
-                    } else {
-                      mrb_funcall(mrb, mrb_si, "put_index", 3,
-                                  grn_mrb_value_from_grn_obj(mrb, index),
-                                  mrb_fixnum_value(sid),
-                                  mrb_fixnum_value(weight));
-                    }
+                    mrb_ec = mrb_grn_expr_code_new(mrb, ec);
+                    mrb_funcall(mrb, mrb_si, "match_expr_resolve_index_accessor",
+                                2, mrb_accessor, mrb_ec);
                   }
                   break;
                 case GRN_COLUMN_FIX_SIZE :

  Modified: lib/mrb/scripts/scan_info.rb (+11 -0)
===================================================================
--- lib/mrb/scripts/scan_info.rb    2014-06-09 23:05:43 +0900 (02395db)
+++ lib/mrb/scripts/scan_info.rb    2014-06-09 23:20:17 +0900 (af529d7)
@@ -18,6 +18,17 @@ module Groonga
       nil
     end
 
+    def match_expr_resolve_index_accessor(accessor, expr_code)
+      self.flags |= Flags::ACCESSOR
+      index_info = accessor.find_index(op)
+      return if index_info.nil?
+      if accessor.next
+        put_index(accessor, index_info.section_id, expr_code.weight)
+      else
+        put_index(index_info.index, index_info.section_id, expr_code.weight)
+      end
+    end
+
     def match_resolve_index_db_obj(db_obj)
       index_info = db_obj.find_index(op)
       return if index_info.nil?
-------------- next part --------------
HTML����������������������������...
Download 



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