Help us understand the problem. What is going on with this article?

Groonga組み込みコマンドを実行するC-API

More than 5 years have passed since last update.

Groonga組み込みコマンドの実行

※組み込みコマンドを使う視点で説明を書いています。

use_grn_expr_exec.c

grn_ctx_get

組み込みコマンドを取得するために呼び出します。

grn_obj *grn_ctx_get(grn_ctx *ctx, const char *name, int name_size);

引数

名前 概要
ctx grn_ctx * コンテキスト
name const char * コマンド名
name_size int コマンド文字列長

戻り値

グルンコマンドオブジェクト

  grn_ctx ctx;

  /* Groongaの初期化 */
  grn_init();

  /* コンテキストの初期化 */
  grn_ctx_init(&ctx, 0);

  /* コマンドを取得 */
  table_create = grn_ctx_get(&ctx, "table_create", strlen("table_create"));

grn_expr_get_var

組み込みコマンドの引数名を指定して引数を取得します。

grn_obj *grn_expr_get_var(grn_ctx *ctx, grn_obj *expr,
                                  const char *name, unsigned int name_size);

引数

名前 概要
ctx grn_ctx * コンテキスト
expr grn_obj * コマンドオブジェクト
name const char * 引数名
name_size int 引数文字列長

戻り値

グルン引数オブジェクト

  /* コマンドを取得 */
  grn_obj *truncate = grn_ctx_get(&ctx, "truncate", strlen("truncate"));

  /* 引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var(&ctx, command, "table", strlen("table"));


  /* 引数の中身を設定 */
  GRN_TEXT_PUTS(&ctx, table, "Users");

grn_expr_get_var_by_offset

組み込みコマンドの引数をOffsetにより指定して取得します。

grn_obj *grn_expr_get_var_by_offset(grn_ctx *ctx, grn_obj *expr, unsigned int offset);

引数

名前 概要
ctx grn_ctx * コンテキスト
expr grn_obj * コマンドオブジェクト
offset unsigned int 引数の順番

戻り値

グルン引数オブジェクト

  /* コマンドを取得 */
  grn_obj *truncate = grn_ctx_get(&ctx, "truncate", strlen("truncate"));

  /* Offsetから引数を取得して値を設定 */
  grn_obj *table = grn_expr_get_var_by_offset(&ctx, truncate, 0);

  /* 引数の中身を設定 */
  GRN_TEXT_PUTS(&ctx, table, "Users");

grn_expr_exec

指定した組み込みコマンドを実行します。

grn_obj *grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs);

引数

名前 概要
ctx grn_ctx * コンテキスト
expr grn_obj * コマンドオブジェクト
nargs int

戻り値

グルンオブジェクト

  grn_ctx ctx;

  /* Groongaの初期化 */
  grn_init();

  /* コンテキストの初期化 */
  grn_ctx_init(&ctx, 0);

  /* コマンドを取得 */
  grn_obj *status = grn_ctx_get(ctx, "status", strlen("status"));

  /* コマンドの実行*/
  grn_expr_exec(ctx, status, 0);

grn_ctx_set_output_type

実行結果などのフォーマットタイプを設定します。

grn_content_type grn_ctx_get_output_type(grn_ctx *ctx);
grn_rc grn_ctx_set_output_type(grn_ctx *ctx, grn_content_type type);

引数

名前 概要
ctx grn_ctx * コンテキスト
type grn_content_type コンテンツフォーマット

戻り値

結果セット

コンテンツタイプ

定数 概要
GRN_CONTENT_TSV TSV形式
GRN_CONTENT_JSON JSON形式
GRN_CONTENT_XML XML形式
  grn_ctx ctx;

  /* Groongaの初期化 */
  grn_init();

  /* コンテキストの初期化 */
  grn_ctx_init(&ctx, 0);


  /* 出力タイプの設定 */
  grn_ctx_set_output_type(&ctx, GRN_CONTENT_JSON);

grn_expr_clear_vars

引数の値を除去します。

grn_rc grn_expr_clear_vars(grn_ctx *ctx, grn_obj *expr);

引数

名前 概要
ctx grn_ctx * コンテキスト
expr grn_obj * コマンドオブジェクト

戻り値

結果セット

    /* コマンドを取得 */
    grn_obj *table_create = grn_ctx_get(&ctx, "table_create", strlen("table_create"));

    /* 引数の取得 */
    grn_obj *name = grn_expr_get_var(&ctx, table_create, "name", strlen("name"));
    grn_obj *flags = grn_expr_get_var(&ctx, table_create , "flags", strlen("flags"));
    grn_obj *key_type = grn_expr_get_var(&ctx, table_create , "key_type", strlen("key_type"));


    /* 引数の設定 */
    GRN_TEXT_PUTS(&ctx, name, "Users");
    GRN_TEXT_PUTS(&ctx, flags, "TABLE_HASH_KEY");
    GRN_TEXT_PUTS(&ctx, key_type, "ShortText");

    /* コマンドの実行 */
    grn_expr_exec(&ctx, table_create, 0);


    /* 引数のリセット */
    grn_expr_clear_vars(&ctx, table_create);

    /* 引数の取得 */
    name = grn_expr_get_var(&ctx, table_create, "name", strlen("name"));
    flags = grn_expr_get_var(&ctx, table_create , "flags", strlen("flags"));
    key_type = grn_expr_get_var(&ctx, table_create , "key_type", strlen("key_type"));


    /* 引数の設定 */
    GRN_TEXT_PUTS(&ctx, name, "Comments");
    GRN_TEXT_PUTS(&ctx, flags, "TABLE_HASH_KEY");
    GRN_TEXT_PUTS(&ctx, key_type, "ShortText");

    /* コマンドの実行 */
    grn_expr_exec(&ctx, table_create, 0);

grn_ctx_info_get

コンテキスト内に格納された情報を取得します。

grn_rc grn_ctx_info_get(grn_ctx *ctx, grn_ctx_info *info);

引数

名前 概要
ctx grn_ctx * コンテキスト
info grn_ctx_info * コンテキスト情報オブジェクト

戻り値

結果セット

  grn_ctx_info info;


  /* コマンドを取得 */
  grn_obj *status = grn_ctx_get(ctx, "status", strlen("status"));

  /* コマンドの実行*/
  grn_expr_exec(&ctx, status, 0);


  /* コマンド結果の取得 */
  grn_ctx_info_get(&ctx, &info);
  printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));

grn_ctx_recv

結果内容の取得

unsigned int grn_ctx_recv(grn_ctx *ctx, char **str, unsigned int *str_len, int *flags);

引数

名前 概要
ctx grn_ctx * コンテキスト
str char ** 結果内容
str_len unsigned int * 結果内容文字列長
flags int * フラグ

戻り値

結果

  /* コマンドを取得 */
  grn_obj *status = grn_ctx_get(ctx, "status", strlen("status"));

  /* コマンドの実行*/
  grn_expr_exec(&ctx, status, 0);

  {
    /* 結果の取得 */
    char *result;
    unsigned int result_length;
    int recv_flags;

    grn_ctx_recv(&ctx, &result, &result_length, &recv_flags);
    printf("%.*s\n", result_length, result);
  }

サンプルコード

use_grn_expr_exec.c

Yujiro3
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした