コード例 #1
0
ファイル: ts_expr.c プロジェクト: cafedomancer/groonga
grn_rc
grn_ts_expr_parse(grn_ctx *ctx, grn_obj *table, grn_ts_str str,
                  grn_ts_expr **expr)
{
    grn_rc rc;
    grn_ts_expr *new_expr;
    grn_ts_expr_parser *parser;
    if (!ctx) {
        return GRN_INVALID_ARGUMENT;
    }
    if (!table || !grn_ts_obj_is_table(ctx, table) ||
            (!str.ptr && str.size) || !expr) {
        GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument");
    }
    rc = grn_ts_expr_parser_open(ctx, table, &parser);
    if (rc != GRN_SUCCESS) {
        return rc;
    }
    rc = grn_ts_expr_parser_parse(ctx, parser, str, &new_expr);
    grn_ts_expr_parser_close(ctx, parser);
    if (rc != GRN_SUCCESS) {
        return rc;
    }
    *expr = new_expr;
    return GRN_SUCCESS;
}
コード例 #2
0
ファイル: ts.c プロジェクト: flaviommedeiros/groonga
/* grn_ts_writer_fin() finalizes a writer. */
static void
grn_ts_writer_fin(grn_ctx *ctx, grn_ts_writer *writer)
{
  size_t i;
  if (writer->bufs) {
    for (i = 0; i < writer->n_exprs; i++) {
      grn_ts_buf_fin(ctx, &writer->bufs[i]);
    }
    GRN_FREE(writer->bufs);
  }
  if (writer->names) {
    GRN_FREE(writer->names);
  }
  GRN_OBJ_FIN(ctx, &writer->name_buf);
  if (writer->exprs) {
    for (i = 0; i < writer->n_exprs; i++) {
      grn_ts_expr_close(ctx, writer->exprs[i]);
    }
    GRN_FREE(writer->exprs);
  }
  if (writer->parser) {
    grn_ts_expr_parser_close(ctx, writer->parser);
  }
}