Files
rmodb/src/modb_metadata_ext.h

79 lines
2.1 KiB
C

#ifndef H__MODB_METADATA_EXT__
#define H__MODB_METADATA_EXT__
#include <stdint.h>
#include "database.h"
#include "modb_ref.h"
enum e_value_type_t {
VTYPE_RAW = 0,
VTYPE_BOOL = 1 << 0,
VTYPE_INT32 = 1 << 1,
VTYPE_DOUBLE = 1 << 2,
VTYPE_STRING = 1 << 3,
VTYPE_TIMESTAMP = 1 << 4,
VTYPE_ID = 1 << 5
};
struct meta_ext_t {
unsigned int id;
struct meta_ext_value_t **values;
size_t n_values;
};
struct meta_ext_value_t {
char *key;
const char *key_c;
size_t key_len;
enum e_value_type_t type;
union {
void *raw;
int boolVal;
int32_t int32;
double dbl;
char *str;
const char *str_c;
int64_t ts;
uint32_t id;
} value;
size_t value_len;
uint32_t is_null :1;
uint32_t is_const :1;
};
int tableRowToMetaExt(column_data **col_data, size_t n_cols, size_t row_idx,
struct meta_ext_t **ext_ptr);
struct meta_ext_t *allocMetaExt(void);
void freeMetaExt(struct meta_ext_t **meta_ext);
struct meta_ext_t **allocMetaExtList(size_t n_meta_ext_list);
void freeMetaExtList(struct meta_ext_t ***meta_ext_list_ptr, size_t n_meta_exts);
struct meta_ext_value_t *allocMetaExtValue(void);
void freeMetaExtValue(struct meta_ext_value_t **meta_ext_value);
struct meta_ext_value_t **allocMetaExtValues(size_t n_values, int alloc_values);
void freeMetaExtValues(struct meta_ext_value_t ***value_list_ptr, size_t n_values);
// MODB Extended Metadata
int modbMetaExtById(stored_conn *sconn, modb_ref *modb, unsigned int id,
struct meta_ext_t **meta_ext);
int modbMetaExtList(stored_conn *sconn, modb_ref *modb, int with_deleted,
struct meta_ext_t ***meta_exts, size_t *n_meta_exts);
int64_t modbMetaExtCreate(stored_conn *sconn, modb_ref *modb, struct meta_ext_t *meta_ext);
int64_t modbMetaExtReplace(stored_conn *sconn, modb_ref *modb, unsigned int id,
struct meta_ext_t *meta_ext);
int modbMetaExtDelete(stored_conn *sconn, modb_ref *modb, unsigned int id);
int modbMetaExtDestroy(stored_conn *sconn, modb_ref *modb, unsigned int id);
#endif // H__MODB_METADATA_EXT__