Metadata Extended handling implemented

This commit is contained in:
2020-10-15 12:11:51 +01:00
parent a47cb96c84
commit ff218def1b
4 changed files with 572 additions and 54 deletions

View File

@@ -1,48 +1,71 @@
#ifndef H__MODB_METADATA_EXT__
#define H__MODB_METADATA_EXT__
#include <stdint.h>
#include "database.h"
#include "modb_ref.h"
// MetadataExtended object
struct metadata_ext_t {
unsigned int id;
// TODO: dynamic extended metadata definition
// struct metadata_ext_value_t **meta_ext;
// size_t n_meta_ext;
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 metadata_ext_value_t {
// char *key;
// enum e_column_type_t type;
// union {
// void *vptr;_ptr
struct meta_ext_t {
unsigned int id;
// int8_t int8;
// uint8_t uint8;
struct meta_ext_value_t **values;
size_t n_values;
};
// int16_t int16;
// uint16_t uint16;
struct meta_ext_value_t {
char *key;
const char *key_c;
enum e_value_type_t type;
union {
void *raw;
int bool;
int32_t int32;
double dbl;
char *str;
const char *str_c;
int64_t ts;
uint32_t id;
} value;
size_t value_len;
// int32_t int32;
// uint32_t uint32;
uint32_t is_null :1;
uint32_t is_const :1;
};
// int64_t int64;
// uint64_t uint64;
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);
// float flt;
// double dbl;
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);
// char *ptr_str;
// } value;
// size_t value_len;
//};
// MODB Extended Metadata
int modbMetaExtById(stored_conn *sconn, modb_ref *modb, unsigned int id,
struct meta_ext_t **meta_ext);
struct metadata_ext_t *allocMetadataExt(void);
struct metadata_ext_t **allocMetadataExts(size_t n_metadata_exts);
void freeMetadataExt(struct metadata_ext_t **metadata_ext);
void freeMetadataExts(struct metadata_ext_t ***metadata_exts_ptr, size_t n_metadata_exts);
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__