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

ENH: Implement get_datatype_name

parent a80f3ebd
No related branches found
No related tags found
1 merge request!24API: Introduce value and datatype structs to Extern C
Pipeline #13630 passed with warnings
Pipeline: caosdb-cppinttest

#13631

    ......@@ -418,11 +418,11 @@ int caosdb_entity_parent_get_description(caosdb_entity_parent *parent, char **ou
    int caosdb_entity_message_get_code(caosdb_entity_message *message, int *out);
    int caosdb_entity_message_get_description(caosdb_entity_message *message, char **out);
    // TODO(fspreck) getters for value and datatypes
    int caosdb_entity_datatype_is_atomic(caosdb_entity_datatype *datatype, bool *out);
    int caosdb_entity_datatype_is_reference(caosdb_entity_datatype *datatype, bool *out);
    int caosdb_entity_datatype_is_list_of_atomic(caosdb_entity_datatype *datatype, bool *out);
    int caosdb_entity_datatype_is_list_of_refernce(caosdb_entity_datatype *datatype, bool *out);
    int caosdb_entity_datatype_get_datatype_name(caosdb_entity_datatype *datatype, char **out);
    int caosdb_entity_value_is_null(caosdb_entity_value *value, bool *out);
    int caosdb_entity_value_is_string(caosdb_entity_value *value, bool *out);
    ......
    ......@@ -1064,6 +1064,31 @@ ERROR_RETURN_CODE(GENERIC_ERROR,
    }
    return 0;
    })
    ERROR_RETURN_CODE(
    GENERIC_ERROR,
    int caosdb_entity_datatype_get_datatype_name(caosdb_entity_datatype *datatype, char **out), {
    auto *wrapped_datatype = WRAPPED_DATATYPE_CAST(datatype);
    std::string datatype_name;
    if (wrapped_datatype->IsList()) {
    const auto &list_datatype = wrapped_datatype->GetAsList();
    if (list_datatype.IsListOfAtomic()) {
    datatype_name = ENUM_NAME_FROM_VALUE(list_datatype.GetAtomicDataType(), AtomicDataType);
    } else {
    datatype_name = list_datatype.GetReferenceDataType().GetName();
    }
    } else {
    if (wrapped_datatype->IsAtomic()) {
    datatype_name = ENUM_NAME_FROM_VALUE(wrapped_datatype->GetAsAtomic(), AtomicDataType);
    } else {
    datatype_name = wrapped_datatype->GetAsReference().GetName();
    }
    }
    char *tmp = (char *)malloc(sizeof(char) * datatype_name.length() + 1);
    strcpy(tmp, datatype_name.c_str());
    delete[] *out;
    *out = tmp;
    return 0;
    })
    VALUE_IS(null, IsNull)
    VALUE_IS(string, IsString)
    ......
    ......@@ -202,6 +202,23 @@ TEST_F(test_ccaosdb, test_datatype) {
    EXPECT_EQ(return_code, 0);
    EXPECT_TRUE(is_a);
    char *name = nullptr; // NOLINT
    return_code = caosdb_entity_datatype_get_datatype_name(&atomic, &name);
    EXPECT_EQ(return_code, 0);
    EXPECT_STREQ(name, "INTEGER");
    return_code = caosdb_entity_datatype_get_datatype_name(&reference, &name);
    EXPECT_EQ(return_code, 0);
    EXPECT_STREQ(name, "MyType");
    return_code = caosdb_entity_datatype_get_datatype_name(&list_of_atomics, &name);
    EXPECT_EQ(return_code, 0);
    EXPECT_STREQ(name, "DATETIME");
    return_code = caosdb_entity_datatype_get_datatype_name(&list_of_references, &name);
    EXPECT_EQ(return_code, 0);
    EXPECT_STREQ(name, "MyType");
    return_code = caosdb_entity_delete_datatype(&atomic);
    EXPECT_EQ(return_code, 0);
    return_code = caosdb_entity_delete_datatype(&reference);
    ......
    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