Skip to content
Snippets Groups Projects
Commit ec2eb3eb authored by florian's avatar florian
Browse files

ENH: Add removal of parents and properties to Extern C

parent aaedb0ed
No related branches found
No related tags found
3 merge requests!12F consolidation,!9Draft: API: remove UniqueResult, lower-case at, size for ResultSet,!8ENH: Add retrieval and queries to Extern C interface
Pipeline #11854 passed
Pipeline: caosdb-cppinttest

#11860

    This commit is part of merge request !8. Comments created here will be created in the context of that merge request.
    ......@@ -404,8 +404,11 @@ int caosdb_entity_entity_set_value(caosdb_entity_entity *entity,
    const char *value);
    int caosdb_entity_entity_append_parent(caosdb_entity_entity *entity,
    caosdb_entity_parent *parent);
    int caosdb_entity_entity_remove_parent(caosdb_entity_entity *entity, int index);
    int caosdb_entity_entity_append_property(caosdb_entity_entity *entity,
    caosdb_entity_property *property);
    int caosdb_entity_entity_remove_property(caosdb_entity_entity *entity,
    int index);
    int caosdb_entity_property_set_id(caosdb_entity_property *property,
    const char *id);
    ......
    ......@@ -769,6 +769,17 @@ ERROR_RETURN_CODE(
    return 0;
    })
    ERROR_RETURN_CODE(
    GENERIC_ERROR,
    int caosdb_entity_entity_remove_parent(caosdb_entity_entity *entity,
    int index),
    {
    auto *wrapped_entity =
    static_cast<caosdb::entity::Entity *>(entity->wrapped_entity);
    wrapped_entity->RemoveParent(index);
    return 0;
    })
    ERROR_RETURN_CODE(
    GENERIC_ERROR,
    int caosdb_entity_entity_append_property(caosdb_entity_entity *entity,
    ......@@ -781,6 +792,16 @@ ERROR_RETURN_CODE(
    wrapped_entity->AppendProperty(*wrapped_property);
    return 0;
    })
    ERROR_RETURN_CODE(
    GENERIC_ERROR,
    int caosdb_entity_entity_remove_property(caosdb_entity_entity *entity,
    int index),
    {
    auto *wrapped_entity =
    static_cast<caosdb::entity::Entity *>(entity->wrapped_entity);
    wrapped_entity->RemoveProperty(index);
    return 0;
    })
    CAOSDB_PARENT_SET(id, id, wrapped_parent->SetId(std::string(id));)
    CAOSDB_PARENT_SET(name, name, wrapped_parent->SetName(std::string(name));)
    ......
    ......@@ -347,3 +347,66 @@ TEST_F(test_ccaosdb, test_entity_with_parent_and_property) {
    return_code = caosdb_entity_delete_property(&output_property);
    EXPECT_EQ(return_code, 0);
    }
    TEST_F(test_ccaosdb, test_remove_property) {
    caosdb_entity_entity entity;
    int return_code(caosdb_entity_create_entity(&entity));
    EXPECT_EQ(return_code, 0);
    // Create two properties with names
    caosdb_entity_property in_prop_1;
    return_code = caosdb_entity_create_property(&in_prop_1);
    EXPECT_EQ(return_code, 0);
    return_code = caosdb_entity_property_set_name(&in_prop_1, "Property 1");
    EXPECT_EQ(return_code, 0);
    caosdb_entity_property in_prop_2;
    return_code = caosdb_entity_create_property(&in_prop_2);
    EXPECT_EQ(return_code, 0);
    return_code = caosdb_entity_property_set_name(&in_prop_2, "Property 2");
    EXPECT_EQ(return_code, 0);
    // Append them
    return_code = caosdb_entity_entity_append_property(&entity, &in_prop_1);
    EXPECT_EQ(return_code, 0);
    return_code = caosdb_entity_entity_append_property(&entity, &in_prop_2);
    EXPECT_EQ(return_code, 0);
    // Delete one and see that the number of properties decreases by one
    int count[] = {0}; // NOLINT
    return_code = caosdb_entity_entity_get_properties_size(&entity, count);
    EXPECT_EQ(return_code, 0);
    EXPECT_EQ(*count, 2);
    return_code = caosdb_entity_entity_remove_property(&entity, 0);
    EXPECT_EQ(return_code, 0);
    return_code = caosdb_entity_entity_get_properties_size(&entity, count);
    EXPECT_EQ(return_code, 0);
    EXPECT_EQ(*count, 1);
    caosdb_entity_property out_prop;
    return_code = caosdb_entity_entity_get_property(&entity, &out_prop, 0);
    EXPECT_EQ(return_code, 0);
    char in[255] = {"a"}; // NOLINT
    char out[255] = {"b"}; // NOLINT
    // Deleted the first property, so the second one should remain.
    return_code = caosdb_entity_property_get_name(&in_prop_2, in);
    EXPECT_EQ(return_code, 0);
    return_code = caosdb_entity_property_get_name(&out_prop, out);
    EXPECT_EQ(return_code, 0);
    EXPECT_EQ(strcmp(in, out), 0);
    // Delete everything we have created
    return_code = caosdb_entity_delete_property(&in_prop_2);
    EXPECT_EQ(return_code, 0);
    return_code = caosdb_entity_delete_property(&in_prop_1);
    EXPECT_EQ(return_code, 0);
    return_code = caosdb_entity_delete_entity(&entity);
    EXPECT_EQ(return_code, 0);
    }
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment