19 #include "../ctx_impl.h"
38 "Groonga::ExpressionCode",
50 mrb_scan_info = mrb_cptr_value(mrb, scan_info);
52 mrb_intern(mrb,
"ScanInfo")));
64 mrb_code = mrb_cptr_value(mrb, code);
66 mrb_intern(mrb,
"ExpressionCode")));
77 scan_info **sis, *si = NULL;
112 if (o >= m) {
return NULL; }
147 if (stat || m != o + 1) {
return NULL; }
148 if (!(sis =
GRN_MALLOCN(scan_info *, m + m + o))) {
return NULL; }
168 mrb_si = mrb_grn_scan_info_new(mrb, si);
176 if ((*p)->header.type ==
GRN_EXPR) {
186 mrb_value mrb_ec = mrb_grn_expr_code_new(mrb, ec);
190 mrb_si = mrb_grn_scan_info_new(mrb, si);
194 mrb_cptr_value(mrb, ec->
value),
195 mrb_fixnum_value(sid),
196 mrb_fixnum_value(weight));
199 mrb_cptr_value(mrb, index),
200 mrb_fixnum_value(sid),
201 mrb_fixnum_value(weight));
208 mrb_value mrb_ec = mrb_grn_expr_code_new(mrb, ec);
210 mrb_si = mrb_grn_scan_info_new(mrb, si);
212 mrb_cptr_value(mrb, index),
213 mrb_fixnum_value(sid),
214 mrb_fixnum_value(weight));
229 mrb_value mrb_ec = mrb_grn_expr_code_new(mrb, ec);
232 mrb_si = mrb_grn_scan_info_new(mrb, si);
234 mrb_cptr_value(mrb, index),
235 mrb_fixnum_value(sid),
236 mrb_fixnum_value(weight));
243 mrb_si = mrb_grn_scan_info_new(mrb, si);
245 mrb_cptr_value(mrb, index),
246 mrb_fixnum_value(sid),
247 mrb_fixnum_value(1));
254 mrb_si = mrb_grn_scan_info_new(mrb, si);
256 mrb_cptr_value(mrb, *p),
257 mrb_fixnum_value(sid),
258 mrb_fixnum_value(1));
260 mrb_si = mrb_grn_scan_info_new(mrb, si);
262 mrb_cptr_value(mrb, index),
263 mrb_fixnum_value(sid),
264 mrb_fixnum_value(1));
291 if (c->
value == var) {
328 "invalid expression: can't use column as a value: %.*s",
355 mrb_si = mrb_grn_scan_info_new(mrb, si);
366 mrb_si = mrb_grn_scan_info_new(mrb, si);
368 mrb_cptr_value(mrb, index),
369 mrb_fixnum_value(sid),
370 mrb_fixnum_value(1));
375 mrb_si = mrb_grn_scan_info_new(mrb, si);
377 mrb_cptr_value(mrb, index),
378 mrb_fixnum_value(sid),
379 mrb_fixnum_value(1));
425 mrb_get_args(mrb,
"ooii", &mrb_expr, &mrb_n, &op, &size);
429 sis = scan_info_build(ctx, expr, n, op, size);
430 return mrb_cptr_value(mrb, sis);
439 DATA_TYPE(
self) = &mrb_grn_scan_info_type;
450 DATA_TYPE(
self) = &mrb_grn_expr_code_type;
508 struct RClass *module = ctx->
impl->mrb.module;
525 grn_mrb_load(ctx,
"expression.rb");
536 mrb_sis =
mrb_funcall(mrb, mrb_obj_value(ctx->
impl->mrb.module),
"build", 4,
537 mrb_cptr_value(mrb, expr),
538 mrb_cptr_value(mrb, n),
539 mrb_fixnum_value(op),
540 mrb_fixnum_value(size));