grn_scanner * grn_scanner_open(grn_ctx *ctx, grn_obj *expr, grn_operator op, grn_bool record_exist) { grn_scanner *scanner; scanner = GRN_MALLOC(sizeof(grn_scanner)); if (!scanner) { return NULL; } scanner->source_expr = expr; scanner->expr = grn_expr_rewrite(ctx, expr); if (!scanner->expr) { scanner->expr = expr; } scanner->sis = grn_scan_info_build(ctx, scanner->expr, &(scanner->n_sis), op, record_exist); if (!scanner->sis) { grn_scanner_close(ctx, scanner); return NULL; } return scanner; }
/* * Rewrites expression. * * @example * expression.parse("age >= 10 AND age < 20", * :syntax => :script) * expression.rewrite # => New rewritten expression. * # It'll use between(age, 10, "include", 20, "exclude") * * @overload rewrite * @return [Groonga::Expression, nil] new rewritten expression when * the expression is rewritten, `nil` otherwise. * * @since 5.1.0 */ static VALUE rb_grn_expression_rewrite (VALUE self) { grn_ctx *context = NULL; grn_obj *expression; grn_obj *rewritten_expression; rb_grn_expression_deconstruct(SELF(self), &expression, &context, NULL, NULL, NULL, NULL, NULL); rewritten_expression = grn_expr_rewrite(context, expression); return GRNOBJECT2RVAL(Qnil, context, rewritten_expression, GRN_TRUE); }