static mrb_value 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; 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, "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; if (!mrb_nil_p(mrb_options)) { mrb_value mrb_mode; mrb_mode = grn_mrb_options_get_lit(mrb, mrb_options, "mode"); if (!mrb_nil_p(mrb_mode)) { optarg.mode = grn_mrb_value_to_operator(mrb, mrb_mode); } } size = grn_ii_estimate_size_for_query(ctx, (grn_ii *)index_column, query, query_size, &optarg); grn_mrb_value_to_raw_data_buffer_fin(mrb, &buffer); grn_mrb_ctx_check(mrb); return mrb_fixnum_value(size); }
void test_estimate_size_for_query(void) { grn_obj *index_column; grn_ii *ii; grn_obj_close(context, db); db = grn_db_create(context, cut_build_path(tmp_directory, "estimate.grn", NULL), NULL); assert_send_command("table_create Memos TABLE_NO_KEY"); assert_send_command("column_create Memos content COLUMN_SCALAR Text"); assert_send_command("table_create Terms TABLE_PAT_KEY ShortText " "--default_tokenizer TokenBigramSplitSymbolAlphaDigit " "--normalizer NormalizerAuto"); assert_send_command("column_create Terms index COLUMN_INDEX|WITH_POSITION " "Memos content"); assert_send_command("load --table Memos\n" "[" "[\"content\"]," "[\"Groonga\"]," "[\"Rroonga\"]," "[\"Mroonga\"]" "]"); index_column = grn_ctx_get(context, "Terms.index", strlen("Terms.index")); ii = (grn_ii *)index_column; cut_assert_equal_double(1, DBL_EPSILON, grn_ii_estimate_size_for_query(context, ii, "Groonga", strlen("Groonga"), NULL)); }