Created
October 1, 2013 11:22
-
-
Save naoa/6777040 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <groonga.h> | |
int | |
main(int argc, char **argv) | |
{ | |
grn_ctx ctx; | |
grn_obj *db, *table, *column, *key_type, *value_type; | |
grn_id id; | |
grn_rc rc; | |
int added; | |
grn_obj value, bulk; | |
/* groongaのデータベースファイル名 */ | |
const char *path = "test.grn"; | |
/* -------------初期処理------------- */ | |
/* groongaライブラリを初期化 */ | |
/* https://github.com/groonga/groonga/blob/master/doc/API.rd#L15 */ | |
if (grn_init()) { | |
fprintf(stderr, "grn_init() failed\n"); | |
return -1; | |
} | |
/*grn_ctx構造体を初期化*/ | |
/*https://github.com/groonga/groonga/blob/master/doc/API.rd#L51*/ | |
if (grn_ctx_init(&ctx, 0)) { | |
fprintf(stderr, "grn_ctx_init() failed\n"); | |
return -1; | |
} | |
/* -------------データベースオープン処理------------- */ | |
/* データベースを開く */ | |
/* http://groonga.org/ja/docs/reference/api/grn_db.html */ | |
db = grn_db_open(&ctx, path); | |
/*データベースを開けなければつくる*/ | |
/* http://groonga.org/ja/docs/reference/api/grn_db.html */ | |
if (!db) { db = grn_db_create(&ctx, path, NULL); } | |
/* データベースを開けず、つくれなければエラー処理 */ | |
if (!db) { | |
fprintf(stderr, "db initialize failed\n"); | |
return -1; | |
} | |
/* -------------テーブルオープンor作成処理------------- */ | |
/* dbからSHORT_TEXT型に対応するオブジェクトを検索して返す */ | |
/*http://groonga.org/ja/docs/reference/api/grn_ctx.html */ | |
key_type = grn_ctx_at(&ctx, GRN_DB_SHORT_TEXT); | |
/* GRN_TABLE_OPEN_OR_CREATE grn_ctx_get、grn_table_createを行うマクロ */ | |
/* テーブルを開くまたはテーブルを作成する */ | |
/* https://github.com/groonga/groonga/blob/master/include/groonga.h#L494 */ | |
/* http://groonga.org/ja/docs/reference/api/grn_ctx.html */ | |
/* http://groonga.org/ja/docs/reference/api/grn_table.html */ | |
GRN_TABLE_OPEN_OR_CREATE(&ctx, "table", 5, NULL, | |
GRN_OBJ_TABLE_HASH_KEY|GRN_OBJ_PERSISTENT, | |
key_type, NULL, table); | |
/* -------------カラムオープンor作成処理------------- */ | |
/* dbからTEXT型に対応するオブジェクトを検索して返す */ | |
/*http://groonga.org/ja/docs/reference/api/grn_ctx.html*/ | |
value_type = grn_ctx_at(&ctx, GRN_DB_TEXT); | |
/* GRN_COLUMN_OPEN_OR_CREATE grn_obj_column、grn_column_createを行うマクロ */ | |
/* https://github.com/groonga/groonga/blob/master/include/groonga.h#L728 */ | |
/* http://groonga.org/ja/docs/reference/api/grn_obj.html */ | |
/* http://groonga.org/ja/docs/reference/api/grn_column.html */ | |
GRN_COLUMN_OPEN_OR_CREATE(&ctx, table, "col", 3, NULL, | |
GRN_OBJ_PERSISTENT|GRN_OBJ_COLUMN_SCALAR, | |
value_type, column); | |
/* -------------テーブルへの新規レコード追加or既存レコードのID取得処理------------- */ | |
/* http://groonga.org/ja/docs/reference/api/grn_table.html */ | |
id = grn_table_add(&ctx, table, "rec1", 4, &added); | |
printf("id=%d, added=%d\n", id, added); | |
/* -------------レコードに対応するカラムへの値の更新処理------------- */ | |
/* 更新値用バッファの初期処理 */ | |
GRN_TEXT_INIT(&value, 0); | |
/* 更新値を格納 */ | |
GRN_TEXT_PUT(&ctx, &value, "groonga world.", 14); | |
/* 更新値をカラムにセット */ | |
/* http://groonga.org/ja/docs/reference/api/grn_obj.html */ | |
rc = grn_obj_set_value(&ctx, column, id, &value, GRN_OBJ_SET); | |
printf("grn_obj_set_value: rc=%d\n", rc); | |
/* -------------レコードに対応するカラムからの値の取得処理------------- */ | |
/* 取得値格納用バッファの初期処理 */ | |
GRN_TEXT_INIT(&bulk, 0); | |
/* 取得値格納用バッファの先頭ポインタに巻き戻し */ | |
GRN_BULK_REWIND(&bulk); | |
/* カラムから値を取得 */ | |
/* http://groonga.org/ja/docs/reference/api/grn_obj.html */ | |
grn_obj_get_value(&ctx, column, id, &bulk); | |
printf("grn_obj_get_value: bulk=%s\n", GRN_BULK_HEAD(&bulk)); | |
/* -------------取得値格納用バッファ領域の解放------------- */ | |
/* grn_obj構造体を開放 */ | |
/* http://groonga.org/ja/docs/reference/api/grn_obj.html */ | |
grn_obj_close(&ctx, &bulk); | |
/* -------------データベースクローズ処理------------- */ | |
/* grn_obj構造体を開放 */ | |
/* http://groonga.org/ja/docs/reference/api/grn_obj.html */ | |
if (grn_obj_close(&ctx, db)) { | |
fprintf(stderr, "grn_obj_close() failed\n"); | |
return -1; | |
} | |
/* -------------終了処理------------- */ | |
/* grn_ctx構造体を開放 */ | |
/* https://github.com/groonga/groonga/blob/master/doc/API.rd#L52 */ | |
if (grn_ctx_fin(&ctx)) { | |
fprintf(stderr, "grn_ctx_fin() failed\n"); | |
return -1; | |
} | |
/* groongaライブラリを開放 */ | |
/* https://github.com/groonga/groonga/blob/master/doc/API.rd#L15 */ | |
if (grn_fin()) { | |
fprintf(stderr, "grn_fin() failed\n"); | |
return -1; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment