diff options
Diffstat (limited to 'storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c')
-rw-r--r-- | storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c index eb85ff955fa..2af198c2fdb 100644 --- a/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c +++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c @@ -24,6 +24,7 @@ #include <mruby/class.h> #include <mruby/data.h> +#include "mrb_ctx.h" #include "mrb_converter.h" #include "mrb_index_column.h" #include "mrb_operator.h" @@ -77,14 +78,22 @@ mrb_grn_index_column_estimate_size_for_query(mrb_state *mrb, mrb_value self) { grn_ctx *ctx = (grn_ctx *)mrb->ud; grn_obj *index_column; - char *query; - mrb_int query_len; + grn_obj *lexicon; + mrb_value mrb_query; + void *query; + unsigned int query_size; + grn_mrb_value_to_raw_data_buffer buffer; mrb_value mrb_options = mrb_nil_value(); grn_search_optarg optarg; unsigned int size; index_column = DATA_PTR(self); - mrb_get_args(mrb, "s|H", &query, &query_len, &mrb_options); + mrb_get_args(mrb, "o|H", &mrb_query, &mrb_options); + + lexicon = grn_ctx_at(ctx, index_column->header.domain); + grn_mrb_value_to_raw_data_buffer_init(mrb, &buffer); + grn_mrb_value_to_raw_data(mrb, "query", mrb_query, lexicon->header.domain, + &buffer, &query, &query_size); memset(&optarg, 0, sizeof(grn_search_optarg)); optarg.mode = GRN_OP_EXACT; @@ -99,7 +108,11 @@ mrb_grn_index_column_estimate_size_for_query(mrb_state *mrb, mrb_value self) } size = grn_ii_estimate_size_for_query(ctx, (grn_ii *)index_column, - query, query_len, &optarg); + query, query_size, &optarg); + grn_mrb_value_to_raw_data_buffer_fin(mrb, &buffer); + + grn_mrb_ctx_check(mrb); + return mrb_fixnum_value(size); } |