コード例 #1
0
ファイル: scanner.c プロジェクト: XLPE/groonga
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;
}
コード例 #2
0
ファイル: rb-grn-expression.c プロジェクト: genki/rroonga
/*
 * 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);
}