Edited at

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

More than 3 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