summaryrefslogtreecommitdiff
path: root/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c
diff options
context:
space:
mode:
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.c21
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);
}