Kouhei Sutou
null+****@clear*****
Sun Jun 8 14:52:50 JST 2014
Kouhei Sutou 2014-06-08 14:52:50 +0900 (Sun, 08 Jun 2014) New Revision: a717bd4b0027257f0f6a180622de91a17221ca96 https://github.com/groonga/groonga/commit/a717bd4b0027257f0f6a180622de91a17221ca96 Message: mrb: implement index resolution for accessor by mruby Modified files: lib/mrb/mrb_expr.c lib/mrb/scripts/scan_info.rb Modified: lib/mrb/mrb_expr.c (+1 -10) =================================================================== --- lib/mrb/mrb_expr.c 2014-06-08 14:49:20 +0900 (9ac3d5e) +++ lib/mrb/mrb_expr.c 2014-06-08 14:52:50 +0900 (1f17165) @@ -362,17 +362,8 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n, mrb_funcall(mrb, mrb_si, "resolve_index_db_obj", 1, mrb_target); } else if (GRN_ACCESSORP(*p)) { mrb_value mrb_target; - mrb_value mrb_index_info; mrb_target = mrb_grn_accessor_new(mrb, (grn_accessor *)(*p)); - grn_scan_info_set_flags(si, grn_scan_info_get_flags(si) | SCAN_ACCESSOR); - mrb_index_info = mrb_funcall(mrb, mrb_target, "find_index", 1, - mrb_fixnum_value(c->op)); - if (!mrb_nil_p(mrb_index_info)) { - mrb_funcall(mrb, mrb_si, "put_index", 3, - mrb_funcall(mrb, mrb_index_info, "index", 0), - mrb_funcall(mrb, mrb_index_info, "section_id", 0), - mrb_fixnum_value(1)); - } + mrb_funcall(mrb, mrb_si, "resolve_index_accessor", 1, mrb_target); } else { mrb_funcall(mrb, mrb_si, "query=", 1, mrb_cptr_value(mrb, *p)); } Modified: lib/mrb/scripts/scan_info.rb (+14 -0) =================================================================== --- lib/mrb/scripts/scan_info.rb 2014-06-08 14:49:20 +0900 (a2eaad6) +++ lib/mrb/scripts/scan_info.rb 2014-06-08 14:52:50 +0900 (5b2b198) @@ -1,9 +1,23 @@ module Groonga class ScanInfo + module Flags + ACCESSOR = 0x01 + PUSH = 0x02 + POP = 0x04 + PRE_CONST = 0x08 + end + def resolve_index_db_obj(db_obj) index_info = db_obj.find_index(op) return if index_info.nil? put_index(index_info.index, index_info.section_id, 1) end + + def resolve_index_accessor(accessor) + self.flags |= Flags::ACCESSOR + index_info = accessor.find_index(op) + return if index_info.nil? + put_index(index_info.index, index_info.section_id, 1) + end end end -------------- next part -------------- HTML����������������������������...Download