Skip to content

Instantly share code, notes, and snippets.

@Yujiro3
Created October 29, 2014 14:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Yujiro3/48e353aa41938663fc68 to your computer and use it in GitHub Desktop.
Save Yujiro3/48e353aa41938663fc68 to your computer and use it in GitHub Desktop.
Groonga v4.0.7によるgrn_expr_exec()のサンプル
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <groonga/groonga.h>
int main (int argc, char **argv) {
grn_ctx ctx;
grn_obj *db;
grn_ctx_info info;
const char *path = "db/test.db";
/* Groongaの初期化 */
grn_init();
/* コンテキストの初期化 */
grn_ctx_init(&ctx, 0);
/* DBファイルを開く or 作成 */
GRN_DB_OPEN_OR_CREATE(&ctx, path, NULL, db);
/* 出力タイプの設定 */
grn_ctx_set_output_type(&ctx, GRN_CONTENT_JSON);
{
grn_obj *table_create, *name, *flags, *key_type;
/* コマンドを取得 */
table_create = grn_ctx_get(&ctx, "table_create", strlen("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, "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_obj_unlink(&ctx, key_type);
grn_obj_unlink(&ctx, flags);
grn_obj_unlink(&ctx, name);
grn_obj_unlink(&ctx, table_create);
}
{
grn_obj *table_list;
/* コマンドを取得 */
table_list = grn_ctx_get(&ctx, "table_list", strlen("table_list"));
/* コマンドの実行*/
grn_expr_exec(&ctx, table_list, 0);
/* コマンド結果の取得 */
grn_ctx_info_get(&ctx, &info);
printf("%.*s\n", (int)GRN_TEXT_LEN(info.outbuf), GRN_TEXT_VALUE(info.outbuf));
/* リソースの破棄 */
grn_obj_unlink(&ctx, table_list);
}
/* DBを閉じる */
grn_obj_close(&ctx, db);
/* コンテキストの終了 */
grn_ctx_fin(&ctx);
/* Groonga終了処理 */
grn_fin();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment