diff --git a/include/ccaosdb.h b/include/ccaosdb.h index cfe5cf446511d7272554cf4ac7be958bb0a55c11..263dd25770a8a20a34eb9fcd95b09e51759895df 100644 --- a/include/ccaosdb.h +++ b/include/ccaosdb.h @@ -333,6 +333,7 @@ typedef struct { } caosdb_entity_message; // GETTERS FOR EVERYTHING +int caosdb_entity_entity_to_string(caosdb_entity_entity *entity, char **out); int caosdb_entity_entity_get_id(caosdb_entity_entity *entity, char **out); int caosdb_entity_entity_get_role(caosdb_entity_entity *entity, char **out); int caosdb_entity_entity_get_name(caosdb_entity_entity *entity, char **out); @@ -376,6 +377,7 @@ int caosdb_entity_entity_get_parents_size(caosdb_entity_entity *entity, int *out int caosdb_entity_entity_get_parent(caosdb_entity_entity *entity, caosdb_entity_parent *out, int index); +int caosdb_entity_property_to_string(caosdb_entity_property *entity, char **out); int caosdb_entity_property_get_id(caosdb_entity_property *property, char **out); int caosdb_entity_property_get_name(caosdb_entity_property *property, char **out); int caosdb_entity_property_get_description(caosdb_entity_property *property, char **out); @@ -401,6 +403,7 @@ int caosdb_entity_property_get_string_list_value_at(caosdb_entity_property *prop const int index); int caosdb_entity_property_get_value_list_length(caosdb_entity_property *property, int *out); +int caosdb_entity_parent_to_string(caosdb_entity_parent *entity, char **out); int caosdb_entity_parent_get_id(caosdb_entity_parent *parent, char **out); int caosdb_entity_parent_get_name(caosdb_entity_parent *parent, char **out); int caosdb_entity_parent_get_description(caosdb_entity_parent *parent, char **out); diff --git a/src/ccaosdb.cpp b/src/ccaosdb.cpp index b4c7ea1aac3aae3fd5ac539815883d0ea905d56f..b5f79213a02769a31f04bcd9e8a794377fcf05a9 100644 --- a/src/ccaosdb.cpp +++ b/src/ccaosdb.cpp @@ -584,6 +584,16 @@ ERROR_RETURN_CODE(GENERIC_ERROR, int caosdb_entity_delete_parent(caosdb_entity_p }) CAOSDB_ENTITY_GET(id, GetId()) +ERROR_RETURN_CODE(GENERIC_ERROR, + int caosdb_entity_entity_to_string(caosdb_entity_entity *entity, char **out), { + auto *wrapped_entity = WRAPPED_ENTITY_CAST(entity); + std::string role_str = wrapped_entity->ToString(); + auto *tmp = (char *)malloc(sizeof(char) * role_str.length() + 1); + strcpy(tmp, role_str.c_str()); + delete[] * out; + *out = tmp; + return 0; + }) ERROR_RETURN_CODE(GENERIC_ERROR, int caosdb_entity_entity_get_role(caosdb_entity_entity *entity, char **out), { auto *wrapped_entity = WRAPPED_ENTITY_CAST(entity); @@ -839,10 +849,30 @@ ERROR_RETURN_CODE(GENERIC_ERROR, }) CAOSDB_PARENT_GET(id, GetId()) +ERROR_RETURN_CODE(GENERIC_ERROR, + int caosdb_entity_parent_to_string(caosdb_entity_parent *entity, char **out), { + auto *wrapped_entity = WRAPPED_PARENT_CAST(entity); + std::string role_str = wrapped_entity->ToString(); + auto *tmp = (char *)malloc(sizeof(char) * role_str.length() + 1); + strcpy(tmp, role_str.c_str()); + delete[] * out; + *out = tmp; + return 0; + }) CAOSDB_PARENT_GET(name, GetName()) CAOSDB_PARENT_GET(description, GetDescription()) CAOSDB_PROPERTY_GET(id, GetId()) +ERROR_RETURN_CODE(GENERIC_ERROR, + int caosdb_entity_property_to_string(caosdb_entity_property *entity, char **out), { + auto *wrapped_entity = WRAPPED_PROPERTY_CAST(entity); + std::string role_str = wrapped_entity->ToString(); + auto *tmp = (char *)malloc(sizeof(char) * role_str.length() + 1); + strcpy(tmp, role_str.c_str()); + delete[] * out; + *out = tmp; + return 0; + }) CAOSDB_PROPERTY_GET(name, GetName()) CAOSDB_PROPERTY_GET(description, GetDescription()) diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp index 475a5d1a96cb89a3b10ea9e29b0d3e6ab80a6b5d..a97ffa209979c86d457cf94da52c75b06d319685 100644 --- a/test/test_ccaosdb.cpp +++ b/test/test_ccaosdb.cpp @@ -152,6 +152,9 @@ TEST_F(test_ccaosdb, test_entity) { EXPECT_EQ(return_code, 0); EXPECT_EQ(strcmp(out, "length"), 0); + return_code = caosdb_entity_entity_to_string(&entity, &out); + EXPECT_EQ(return_code, 0); + // test call without validation of result return_code = caosdb_entity_entity_set_role(&entity, "FILE"); EXPECT_EQ(return_code, 0); @@ -170,6 +173,7 @@ TEST_F(test_ccaosdb, test_entity) { caosdb_entity_entity_get_role(&entity, &out); EXPECT_EQ(strcmp(out, "PROPERTY"), 0); + caosdb_entity_entity_set_description(&entity, "The length of an object"); caosdb_entity_entity_get_description(&entity, &out); EXPECT_EQ(strcmp(out, "The length of an object"), 0); @@ -241,6 +245,9 @@ TEST_F(test_ccaosdb, test_property) { caosdb_entity_property_get_id(&property, &out); EXPECT_EQ(strcmp(out, "some_id"), 0); + return_code = caosdb_entity_property_to_string(&property, &out); + EXPECT_EQ(return_code, 0); + caosdb_entity_property_get_name(&property, &out); EXPECT_EQ(strcmp(out, "some_name"), 0); @@ -341,6 +348,7 @@ TEST_F(test_ccaosdb, test_entity_with_parent_and_property) { char *in = nullptr; // NOLINT char *out = nullptr; // NOLINT + // cannot assign an already assigned property return_code = caosdb_entity_entity_get_property(&entity, &input_property, 0); EXPECT_EQ(return_code, caosdb::StatusCode::EXTERN_C_ASSIGNMENT_ERROR); @@ -382,6 +390,9 @@ TEST_F(test_ccaosdb, test_entity_with_parent_and_property) { caosdb_entity_parent_get_name(&output_parent, &out); EXPECT_EQ(strcmp(in, out), 0); + return_code = caosdb_entity_parent_to_string(&input_parent, &out); + EXPECT_EQ(return_code, 0); + // Delete everything return_code = caosdb_entity_delete_parent(&input_parent); EXPECT_EQ(return_code, 0);