diff --git a/src/modb_database.h b/src/modb_database.h index 0680940..5bf536a 100644 --- a/src/modb_database.h +++ b/src/modb_database.h @@ -2,7 +2,7 @@ #define H__MODB_DATABASE__ #include "database.h" -#include "modb_types.h" +#include "modb_ref.h" // Connection reference diff --git a/src/modb_database_p.h b/src/modb_database_p.h index d9dc199..1e3b957 100644 --- a/src/modb_database_p.h +++ b/src/modb_database_p.h @@ -5,7 +5,7 @@ #include #include "database.h" -#include "modb_types.h" +#include "modb_ref.h" int connectionUseMODB(stored_conn *sconn, modb_ref *modb, int override); diff --git a/src/modb_groups.h b/src/modb_groups.h index 859a616..d9fb5b8 100644 --- a/src/modb_groups.h +++ b/src/modb_groups.h @@ -2,7 +2,8 @@ #define H__MODB_GROUPS__ #include "database.h" -#include "modb_types.h" +#include "modb_ref.h" + // Group object struct group_t { diff --git a/src/modb_metadata.c b/src/modb_metadata.c index b8e352d..630af78 100644 --- a/src/modb_metadata.c +++ b/src/modb_metadata.c @@ -3,11 +3,14 @@ #include #include "modb_metadata.h" +#include "modb_objects.h" +#include "modb_metadata_ext.h" #include "modb_users.h" #include "modb_groups.h" #include "modb_p.h" +// ##### PRIVATE int tableRowsToMetadataList(column_data **col_data, size_t n_cols, struct metadata_t ***metadata_list, size_t *n_metadatas) { @@ -141,6 +144,83 @@ int doScalarMetadataListQuery(stored_conn *sconn, modb_ref *modb, +// ##### PUBLIC +struct metadata_t *allocMetadata(void) +{ + struct metadata_t *metadata; + + metadata = malloc(sizeof(struct metadata_t)); + if (metadata == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); + } + memset(metadata, 0, sizeof(struct metadata_t)); + + return metadata; +} +struct metadata_t **allocMetadataList(size_t n_metadatas) +{ + struct metadata_t **metadatas; + + metadatas = (struct metadata_t **)malloc(sizeof(struct metadata_t *) * n_metadatas); + if (metadatas == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); + return 0; + } + memset(metadatas, 0, sizeof(struct metadata_t *) * n_metadatas); + + return metadatas; +} +void freeMetadata(struct metadata_t **metadata_ptr) +{ + struct metadata_t *metadata = *metadata_ptr; + + if (metadata->ext != 0) { + freeMetadataExt(&metadata->ext); + } + + if (metadata->object != 0) { + freeObject(&metadata->object); + } + + if (metadata->n_groups > 0) { + if (metadata->group_ids != 0) { + free(metadata->group_ids); + metadata->group_ids = 0; + } + if (metadata->groups != 0) { + freeGroups(&metadata->groups, metadata->n_groups); + } + metadata->n_groups = 0; + } + + if (metadata->owner != 0) { + freeUser(&metadata->owner); + } + + if (metadata->title != 0) { + free(metadata->title); + metadata->title = 0; + } + + free(metadata); + *metadata_ptr = 0; +} +void freeMetadataList(struct metadata_t ***metadata_list_ptr, size_t n_metadatas) +{ + size_t idx; + struct metadata_t **metadatas_list= *metadata_list_ptr; + + for (idx = 0; idx < n_metadatas; idx++) { + if (*(metadatas_list + idx) != 0) { + freeMetadata((metadatas_list + idx)); + } + } + + free(metadatas_list); + *metadata_list_ptr = 0; +} + + int modbMetadataById(stored_conn *sconn, modb_ref *modb, unsigned int id, struct metadata_t **metadata) { diff --git a/src/modb_metadata.h b/src/modb_metadata.h index 92a0d52..fea80ff 100644 --- a/src/modb_metadata.h +++ b/src/modb_metadata.h @@ -2,9 +2,41 @@ #define H__MODB_METADATA__ #include "database.h" -#include "modb_types.h" +#include "modb_ref.h" -// MODB MetadataList + +// Metadata object +struct metadata_t { + unsigned int id; + + char *type; + size_t type_len; + + char *title; + size_t title_len; + + unsigned int owner_id; + struct user_t *owner; + + int64_t created_on; + int64_t updated_on; + int64_t deleted_on; + + unsigned int *group_ids; + struct group_t **groups; + size_t n_groups; + + struct object_t *object; + struct metadata_ext_t *ext; +}; + +struct metadata_t *allocMetadata(void); +struct metadata_t **allocMetadataList(size_t n_metadatas); +void freeMetadata(struct metadata_t **metadata); +void freeMetadataList(struct metadata_t ***metadata_list_ptr, size_t n_metadatas); + + +// MODB Metadata int modbMetadataById(stored_conn *sconn, modb_ref *modb, unsigned int id, struct metadata_t **metadata); // MetadataList by owner diff --git a/src/modb_metadata_ext.c b/src/modb_metadata_ext.c new file mode 100644 index 0000000..e79c738 --- /dev/null +++ b/src/modb_metadata_ext.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#include "modb_metadata_ext.h" + + +struct metadata_ext_t *allocMetadataExt(void) +{ + struct metadata_ext_t *metadata_ext; + + metadata_ext = malloc(sizeof(struct metadata_ext_t)); + if (metadata_ext == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); + } + memset(metadata_ext, 0, sizeof(struct metadata_ext_t)); + + return metadata_ext; +} +struct metadata_ext_t **allocMetadataExts(size_t n_metadata_exts) +{ + struct metadata_ext_t **metadata_exts; + + metadata_exts = (struct metadata_ext_t **)malloc(sizeof(struct metadata_ext_t *) * n_metadata_exts); + if (metadata_exts == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); + return 0; + } + memset(metadata_exts, 0, sizeof(struct metadata_ext_t *) * n_metadata_exts); + + return metadata_exts; +} +void freeMetadataExt(struct metadata_ext_t **metadata_ext_ptr) +{ + struct metadata_ext_t *metadata_ext = *metadata_ext_ptr; + + free(metadata_ext); + *metadata_ext_ptr = 0; +} +void freeMetadataExts(struct metadata_ext_t ***metadata_exts_ptr, size_t n_metadata_exts) +{ + size_t idx; + struct metadata_ext_t **metadata_exts = *metadata_exts_ptr; + + for (idx = 0; idx < n_metadata_exts; idx++) { + if (*(metadata_exts + idx) != 0) { + freeMetadataExt(metadata_exts + idx); + } + } + + free(metadata_exts); + *metadata_exts_ptr = 0; +} diff --git a/src/modb_metadata_ext.h b/src/modb_metadata_ext.h new file mode 100644 index 0000000..5176e4c --- /dev/null +++ b/src/modb_metadata_ext.h @@ -0,0 +1,48 @@ +#ifndef H__MODB_METADATA_EXT__ +#define H__MODB_METADATA_EXT__ + +#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; +}; + +//struct metadata_ext_value_t { +// char *key; +// enum e_column_type_t type; +// union { +// void *vptr;_ptr + +// int8_t int8; +// uint8_t uint8; + +// int16_t int16; +// uint16_t uint16; + +// int32_t int32; +// uint32_t uint32; + +// int64_t int64; +// uint64_t uint64; + +// float flt; +// double dbl; + +// char *ptr_str; +// } value; +// size_t value_len; +//}; + +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); + + +#endif // H__MODB_METADATA_EXT__ diff --git a/src/modb_objects.c b/src/modb_objects.c index 5d7b2df..a9c2038 100644 --- a/src/modb_objects.c +++ b/src/modb_objects.c @@ -6,6 +6,7 @@ #include "modb_p.h" +// ##### PRIVATE int tableRowsToObjects(column_data **col_data, size_t n_cols, struct object_t ***objects, size_t *n_objects) { @@ -124,6 +125,59 @@ int doScalarObjectsQuery(stored_conn *sconn, modb_ref *modb, } +// ##### PUBLIC +struct object_t *allocObject(void) +{ + struct object_t *object; + + object = malloc(sizeof(struct object_t)); + if (object == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); + } + memset(object, 0, sizeof(struct object_t)); + + return object; +} +struct object_t **allocObjects(size_t n_objects) +{ + struct object_t **objects; + + objects = (struct object_t **)malloc(sizeof(struct object_t *) * n_objects); + if (objects == 0) { + fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); + return 0; + } + memset(objects, 0, sizeof(struct object_t *) * n_objects); + + return objects; +} +void freeObject(struct object_t **object_ptr) +{ + struct object_t *object = *object_ptr; + + if (object->data != 0) { + free(object->data); + object->data = 0; + } + + free(object); + *object_ptr = 0; +} +void freeObjects(struct object_t ***objects_ptr, size_t n_objects) +{ + size_t idx; + struct object_t **objects = *objects_ptr; + + for (idx = 0; idx < n_objects; idx++) { + if (*(objects + idx) != 0) { + freeObject(objects + idx); + } + } + + free(objects); + *objects_ptr = 0; +} + int modbObjectById(stored_conn *sconn, modb_ref *modb, unsigned int id, struct object_t **object) diff --git a/src/modb_objects.h b/src/modb_objects.h index 9840e90..9f78d4b 100644 --- a/src/modb_objects.h +++ b/src/modb_objects.h @@ -2,9 +2,22 @@ #define H__MODB_OBJECTS__ #include "database.h" -#include "modb_types.h" +#include "modb_ref.h" + + +// Object object +struct object_t { + unsigned int id; + + char *data; + size_t data_len; +}; + +struct object_t *allocObject(void); +struct object_t **allocObjects(size_t n_objects); +void freeObject(struct object_t **object); +void freeObjects(struct object_t ***objects_ptr, size_t n_objects); -// object from row // MODB Objects int modbObjectById(stored_conn *sconn, modb_ref *modb, unsigned int id, diff --git a/src/modb_p.h b/src/modb_p.h index dc436f0..13839f2 100644 --- a/src/modb_p.h +++ b/src/modb_p.h @@ -3,9 +3,9 @@ #include -#include "modb_types.h" #include "database.h" #include "strext.h" +#include "modb_ref.h" #define SYS_TABLE "_sys" diff --git a/src/modb_ref.h b/src/modb_ref.h new file mode 100644 index 0000000..1e9f0ac --- /dev/null +++ b/src/modb_ref.h @@ -0,0 +1,12 @@ +#ifndef H__MODB_REF__ +#define H__MODB_REF__ + +#include + +struct modb_ref_t { + const char *name; + size_t name_len; +}; +typedef struct modb_ref_t modb_ref; + +#endif // H__MODB_REF__ diff --git a/src/modb_types.c b/src/modb_types.c deleted file mode 100644 index 36d2fe6..0000000 --- a/src/modb_types.c +++ /dev/null @@ -1,184 +0,0 @@ -#include -#include -#include -#include - -#include "modb_types.h" -#include "modb_groups.h" -#include "modb_users.h" -#include "strext.h" - - -struct metadata_t *allocMetadata(void) -{ - struct metadata_t *metadata; - - metadata = malloc(sizeof(struct metadata_t)); - if (metadata == 0) { - fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); - } - memset(metadata, 0, sizeof(struct metadata_t)); - - return metadata; -} -struct metadata_t **allocMetadataList(size_t n_metadatas) -{ - struct metadata_t **metadatas; - - metadatas = (struct metadata_t **)malloc(sizeof(struct metadata_t *) * n_metadatas); - if (metadatas == 0) { - fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); - return 0; - } - memset(metadatas, 0, sizeof(struct metadata_t *) * n_metadatas); - - return metadatas; -} -void freeMetadata(struct metadata_t **metadata_ptr) -{ - struct metadata_t *metadata = *metadata_ptr; - - if (metadata->ext != 0) { - freeMetadataExt(&metadata->ext); - } - - if (metadata->object != 0) { - freeObject(&metadata->object); - } - - if (metadata->n_groups > 0) { - if (metadata->group_ids != 0) { - free(metadata->group_ids); - metadata->group_ids = 0; - } - if (metadata->groups != 0) { - freeGroups(&metadata->groups, metadata->n_groups); - } - metadata->n_groups = 0; - } - - if (metadata->owner != 0) { - freeUser(&metadata->owner); - } - - if (metadata->title != 0) { - free(metadata->title); - metadata->title = 0; - } - - free(metadata); - *metadata_ptr = 0; -} -void freeMetadataList(struct metadata_t ***metadata_list_ptr, size_t n_metadatas) -{ - size_t idx; - struct metadata_t **metadatas_list= *metadata_list_ptr; - - for (idx = 0; idx < n_metadatas; idx++) { - if (*(metadatas_list + idx) != 0) { - freeMetadata((metadatas_list + idx)); - } - } - - free(metadatas_list); - *metadata_list_ptr = 0; -} - -struct object_t *allocObject(void) -{ - struct object_t *object; - - object = malloc(sizeof(struct object_t)); - if (object == 0) { - fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); - } - memset(object, 0, sizeof(struct object_t)); - - return object; -} -struct object_t **allocObjects(size_t n_objects) -{ - struct object_t **objects; - - objects = (struct object_t **)malloc(sizeof(struct object_t *) * n_objects); - if (objects == 0) { - fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); - return 0; - } - memset(objects, 0, sizeof(struct object_t *) * n_objects); - - return objects; -} -void freeObject(struct object_t **object_ptr) -{ - struct object_t *object = *object_ptr; - - if (object->data != 0) { - free(object->data); - object->data = 0; - } - - free(object); - *object_ptr = 0; -} -void freeObjects(struct object_t ***objects_ptr, size_t n_objects) -{ - size_t idx; - struct object_t **objects = *objects_ptr; - - for (idx = 0; idx < n_objects; idx++) { - if (*(objects + idx) != 0) { - freeObject(objects + idx); - } - } - - free(objects); - *objects_ptr = 0; -} - -struct metadata_ext_t *allocMetadataExt(void) -{ - struct metadata_ext_t *metadata_ext; - - metadata_ext = malloc(sizeof(struct metadata_ext_t)); - if (metadata_ext == 0) { - fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); - } - memset(metadata_ext, 0, sizeof(struct metadata_ext_t)); - - return metadata_ext; -} -struct metadata_ext_t **allocMetadataExts(size_t n_metadata_exts) -{ - struct metadata_ext_t **metadata_exts; - - metadata_exts = (struct metadata_ext_t **)malloc(sizeof(struct metadata_ext_t *) * n_metadata_exts); - if (metadata_exts == 0) { - fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno)); - return 0; - } - memset(metadata_exts, 0, sizeof(struct metadata_ext_t *) * n_metadata_exts); - - return metadata_exts; -} -void freeMetadataExt(struct metadata_ext_t **metadata_ext_ptr) -{ - struct metadata_ext_t *metadata_ext = *metadata_ext_ptr; - - free(metadata_ext); - *metadata_ext_ptr = 0; -} -void freeMetadataExts(struct metadata_ext_t ***metadata_exts_ptr, size_t n_metadata_exts) -{ - size_t idx; - struct metadata_ext_t **metadata_exts = *metadata_exts_ptr; - - for (idx = 0; idx < n_metadata_exts; idx++) { - if (*(metadata_exts + idx) != 0) { - freeMetadataExt(metadata_exts + idx); - } - } - - free(metadata_exts); - *metadata_exts_ptr = 0; -} diff --git a/src/modb_types.h b/src/modb_types.h deleted file mode 100644 index 01ab2a4..0000000 --- a/src/modb_types.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef H__MODB_TYPES__ -#define H__MODB_TYPES__ - -#include -#include - -struct modb_ref_t { - const char *name; - size_t name_len; -}; -typedef struct modb_ref_t modb_ref; - -struct metadata_t { - unsigned int id; - - char *type; - size_t type_len; - - char *title; - size_t title_len; - - unsigned int owner_id; - struct user_t *owner; - - int64_t created_on; - int64_t updated_on; - int64_t deleted_on; - - unsigned int *group_ids; - struct group_t **groups; - size_t n_groups; - - struct object_t *object; - struct metadata_ext_t *ext; -}; - -struct object_t { - unsigned int id; - - char *data; - size_t data_len; -}; - -struct metadata_ext_t { - unsigned int id; - -// TODO: dynamic extended metadata definition -// struct metadata_ext_value_t **meta_ext; -// size_t n_meta_ext; -}; - -//struct metadata_ext_value_t { -// char *key; -// enum e_column_type_t type; -// union { -// void *vptr;_ptr - -// int8_t int8; -// uint8_t uint8; - -// int16_t int16; -// uint16_t uint16; - -// int32_t int32; -// uint32_t uint32; - -// int64_t int64; -// uint64_t uint64; - -// float flt; -// double dbl; - -// char *ptr_str; -// } value; -// size_t value_len; -//}; - -struct metadata_t *allocMetadata(void); -struct metadata_t **allocMetadataList(size_t n_metadatas); -void freeMetadata(struct metadata_t **metadata); -void freeMetadataList(struct metadata_t ***metadata_list_ptr, size_t n_metadatas); - -struct object_t *allocObject(void); -struct object_t **allocObjects(size_t n_objects); -void freeObject(struct object_t **object); -void freeObjects(struct object_t ***objects_ptr, size_t n_objects); - -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); - - -#endif // H__MODB_TYPES__ diff --git a/src/modb_users.h b/src/modb_users.h index d67296a..4ab7bf1 100644 --- a/src/modb_users.h +++ b/src/modb_users.h @@ -2,7 +2,7 @@ #define H__MODB_USERS__ #include "database.h" -#include "modb_types.h" +#include "modb_ref.h" // User object