#ifndef H__MODB_METADATA_EXT__ #define H__MODB_METADATA_EXT__ #include #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__