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