カラム情報取得
このチュートリアルでは、カラム情報のデータを取得する方法について紹介します。
カラムデータ取得のサンプルコード
このチュートリアルで紹介するサンプルコードです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "speedbee.h"
#define ICNT 15
static int print_col_info(sdtsdb_t db, sdtscid_t cid, char *m) {
sdtscolinfo_t *ip;
if ((ip = sdts_get_col_info(db, cid)) == NULL) {
printf("error sdts_get_col_info [%d]\n", sd_get_err());
return -1;
}
printf("-- success sdts_get_col_info --\n");
printf(" *** %s : column info [%s] ***\n", m, (char *)ip->cname);
printf("ctype : %d\n", ip->ctype);
printf("dsz : %d\n", ip->dsz);
printf("rsz : %d\n", ip->rsz);
printf("scnt : %d\n", ip->scnt);
printf("icnt : %lld\n", ip->icnt);
printf("hmsmpl : %g\n", ip->hmsmpl);
printf("hmst : %lld\n", ip->hmst);
printf("msst : %lld\n", ip->msst);
printf("mset : %lld\n", ip->mset);
printf("mscnt : %lld\n", ip->mscnt);
sdts_free_col_info(ip);
return 0;
}
int main(int ac, char *av[]) {
sdtsdb_t db;
sdtscid_t cid;
sdntime_t ts;
int i;
int d[ICNT];
for (i = 0; i < ICNT; i++)
d[i] = i;
if (sd_init(NULL) < 0) {
printf("error sd_init [%d]\n", sd_get_err());
return 1;
}
printf("-- success sd_init --\n");
if ((db = sdts_open_db(NULL)) == NULL) {
printf("error sdts_open_db [%d]\n", sd_get_err());
sd_end();
return 1;
}
printf("-- success sdts_open_db --\n");
if ((cid = sdts_create_col(db, (sdid_t)"H0001",
"COL_TYPE=H;DATA_SIZE=4;SMPL_RATE=10000;SAVE_COUNT=10")) < 0) {
printf("error sdts_create_col[%d]\n", sd_get_err());
sdts_close_db(db);
sd_end();
return 1;
}
printf("-- success sdts_create_col--\n");
(void)print_col_info(db, cid, "test1");
/*
* insert 8 - 8
*/
ts = 1000000000;
for (i = 0; i < 8; i++) {
if (sdts_insert(db, cid, ts, (char *)&d[i], 1) != 1) {
printf("error sdts_insert [%d]\n", sd_get_err());
(void)sdts_close_db(db);
sd_end();
return 1;
}
ts = 0;
}
printf("-- success sdts_insert [%d] --\n", i);
(void)print_col_info(db, cid, "test2");
/*
* insert 3 -> 11
*/
ts = 0;
for (i = 0; i < 3; i++) {
if (sdts_insert(db, cid, ts, (char *)&d[i], 1) != 1) {
printf("error sdts_insert [%d]\n", sd_get_err());
(void)sdts_close_db(db);
sd_end();
return 1;
}
}
printf("-- success sdts_insert [%d] --\n", i);
(void)print_col_info(db, cid, "test3");
/*
* insert 15 -> 26
*/
for (i = 0; i < ICNT; i++) {
if (sdts_insert(db, cid, ts, (char *)&d[i], 1) != 1) {
printf("error sdts_insert [%d]\n", sd_get_err());
(void)sdts_close_db(db);
sd_end();
return 1;
}
}
printf("-- success sdts_insert [%d] --\n", i);
(void)print_col_info(db, cid, "test4");
if (sdts_close_db(db) < 0) {
printf("error sdts_close_db [%d]\n", sd_get_err());
sd_end();
return 1;
}
printf("-- success sd_close_db --\n");
if (sd_end() < 0) {
printf("error sd_end [%d]\n", sd_get_err());
return 1;
}
printf("-- success sd_end --\n");
return 0;
}
カラム情報取得API(sdts_get_col_info)
sdts_get_col_info
で、カラム作成時に設定されたカラム情報を取得します。
戻り値として、カラム情報構造体sdtscolinfo_t
で受け取ります。
このサンプルコードでは、作成したカラム情報について、カラムIDを指定して取得しています。
詳しい内容は、APIドキュメントのsdts_get_col_info
を参照してください。
static int print_col_info(sdtsdb_t db, sdtscid_t cid, char *m) {
sdtscolinfo_t *ip;
if ((ip = sdts_get_col_info(db, cid)) == NULL) {
printf("error sdts_get_col_info [%d]\n", sd_get_err());
return -1;
}
printf("-- success sdts_get_col_info --\n");
printf(" *** %s : column info [%s] ***\n", m, (char *)ip->cname);
printf("ctype : %d\n", ip->ctype);
printf("dsz : %d\n", ip->dsz);
printf("rsz : %d\n", ip->rsz);
printf("scnt : %d\n", ip->scnt);
printf("icnt : %lld\n", ip->icnt);
printf("hmsmpl : %g\n", ip->hmsmpl);
printf("hmst : %lld\n", ip->hmst);
printf("msst : %lld\n", ip->msst);
printf("mset : %lld\n", ip->mset);
printf("mscnt : %lld\n", ip->mscnt);
sdts_free_col_info(ip);
return 0;
}
カラム情報取得後の領域の解放
取得したDB情報は、sdts_get_col_info
内でメモリアロケートした領域であるため、参照後、sdts_get_col_info
APIで確保された領域を解放してください。
sdts_free_col_info(ip);