diff --git a/src/Entity.jl b/src/Entity.jl index b202cb8867e8eec61c2325d60441ec66fb01c250..6a9007d0e57d8af55483abf9cf99b6d3d2fd84ee 100644 --- a/src/Entity.jl +++ b/src/Entity.jl @@ -580,7 +580,7 @@ function create_value( ) elseif in_type <: Integer err_code = ccall( - (:caosdb_entity_create_bool_value, CaosDB.library_name), + (:caosdb_entity_create_int_value, CaosDB.library_name), Cint, (Ref{_Value}, Clong), out, @@ -588,7 +588,7 @@ function create_value( ) elseif in_type <: Number err_code = ccall( - (:caosdb_entity_create_bool_value, CaosDB.library_name), + (:caosdb_entity_create_double_value, CaosDB.library_name), Cint, (Ref{_Value}, Cdouble), out, @@ -1224,7 +1224,7 @@ function _get_value(value::Ref{_Value}) # convert to vector of type of elements s.th. it can be re-used in a # `set_value` function. elt_type = typeof(out[1]) - convert(Vector{elt_type}, out) + return convert(Vector{elt_type}, out) end return out diff --git a/test/runtests.jl b/test/runtests.jl index c2ae2face7fdc82805eab16055069ae4a33c5b04..398b635783bd07ecd1adcfdbf49f8b4a78477e9a 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -102,12 +102,13 @@ using CaosDB rt_with_name = CaosDB.Entity.create_recordtype("TestRT") @test CaosDB.Entity.get_name(rt_with_name) == "TestRT" - @test CaosDB.Entity.get_role(rt_with_name) == "RECORD_TYPE" + @test CaosDB.Entity.get_role(rt_with_name) == CaosDB.Constants.ROLE.RECORD_TYPE prop_with_name_and_unit = CaosDB.Entity.create_property_entity(name = "TestProp", unit = "m") @test CaosDB.Entity.get_name(prop_with_name_and_unit) == "TestProp" - @test CaosDB.Entity.get_role(prop_with_name_and_unit) == "PROPERTY" + @test CaosDB.Entity.get_role(prop_with_name_and_unit) == + CaosDB.Constants.ROLE.PROPERTY @test CaosDB.Entity.get_unit(prop_with_name_and_unit) == "m" rec_with_parent_and_props = CaosDB.Entity.create_record("TestRec") @@ -119,7 +120,7 @@ using CaosDB # cannot set the datatype of a record @test_throws CaosDB.Exceptions.ClientException CaosDB.Entity.set_datatype( rec_with_parent_and_props, - "INTEGER", + CaosDB.Constants.DATATYPE.INTEGER, ) par1 = CaosDB.Entity.create_parent(name = "Parent1") @@ -145,22 +146,20 @@ using CaosDB prop1 = CaosDB.Entity.create_property(name = "Property1", value = "2") prop2 = CaosDB.Entity.create_property(id = "id_of_property_2") - CaosDB.Entity.set_datatype(prop2, "TEXT") + CaosDB.Entity.set_datatype(prop2, CaosDB.Constants.DATATYPE.TEXT) prop3 = CaosDB.Entity.create_property(name = "Property3") CaosDB.Entity.append_properties(rec_with_parent_and_props, [prop1, prop2, prop3]) @test length(CaosDB.Entity.get_properties(rec_with_parent_and_props)) == 3 - # properties can be accessed as a list - # TODO(florian) Fix this once we have a reasonable treatment of value objects in Extern C. - @test_broken CaosDB.Entity.get_value( + # properties can be accessed as a list + @test CaosDB.Entity.get_value( CaosDB.Entity.get_properties(rec_with_parent_and_props)[1], ) == "2" - type, is_ref, is_list = CaosDB.Entity.get_datatype( + type, collection = CaosDB.Entity.get_datatype( CaosDB.Entity.get_properties(rec_with_parent_and_props)[2], ) - @test type == "TEXT" - @test is_ref == false - @test is_list == false + @test type == CaosDB.Constants.DATATYPE.TEXT + @test collection == nothing @test CaosDB.Entity.get_id( CaosDB.Entity.get_properties(rec_with_parent_and_props)[2], ) == "id_of_property_2" @@ -177,7 +176,7 @@ using CaosDB local_path = string(pwd(), "/", "caosdbfilefortests.txt"), remote_path = "/remote_path/file.txt", ) - @test CaosDB.Entity.get_role(file_ent) == "FILE" + @test CaosDB.Entity.get_role(file_ent) == CaosDB.Constants.ROLE.FILE @test CaosDB.Entity.get_name(file_ent) == "TestFile" # local file not found rm(string(pwd(), "/", "caosdbfilefortests.txt")) @@ -191,21 +190,16 @@ using CaosDB @testset "Property values and datatypes" begin @testset "Entity properties" begin int_prop = - CaosDB.Entity.create_property_entity(name = "IntProp", datatype = "INTEGER") - double_prop = CaosDB.Entity.create_property_entity( - name = "DoubleProp", - datatype = "DOUBLE", - ) - bool_prop = CaosDB.Entity.create_property_entity( - name = "BoolProp", - datatype = "BOOLEAN", - ) + CaosDB.Entity.create_property_entity(name = "IntProp", datatype = INTEGER) + double_prop = + CaosDB.Entity.create_property_entity(name = "DoubleProp", datatype = DOUBLE) + bool_prop = + CaosDB.Entity.create_property_entity(name = "BoolProp", datatype = BOOLEAN) string_prop = - CaosDB.Entity.create_property_entity(name = "StringProp", datatype = "TEXT") + CaosDB.Entity.create_property_entity(name = "StringProp", datatype = TEXT) ref_prop = CaosDB.Entity.create_property_entity( name = "RefProp", datatype = "MyRefType", - is_reference = true, ) CaosDB.Entity.set_value(int_prop, 123) CaosDB.Entity.set_value(double_prop, 10.246) @@ -222,38 +216,37 @@ using CaosDB @test isa(CaosDB.Entity.get_value(bool_prop), Bool) @test isa(CaosDB.Entity.get_value(string_prop), String) @test isa(CaosDB.Entity.get_value(ref_prop), String) - @test CaosDB.Entity.get_datatype(int_prop) == ("INTEGER", false, false) - @test CaosDB.Entity.get_datatype(double_prop) == ("DOUBLE", false, false) - @test CaosDB.Entity.get_datatype(bool_prop) == ("BOOLEAN", false, false) - @test CaosDB.Entity.get_datatype(string_prop) == ("TEXT", false, false) - @test CaosDB.Entity.get_datatype(ref_prop) == ("MyRefType", true, false) + @test CaosDB.Entity.get_datatype(int_prop) == (INTEGER, nothing) + @test CaosDB.Entity.get_datatype(double_prop) == (DOUBLE, nothing) + @test CaosDB.Entity.get_datatype(bool_prop) == (BOOLEAN, nothing) + @test CaosDB.Entity.get_datatype(string_prop) == (TEXT, nothing) + @test CaosDB.Entity.get_datatype(ref_prop) == ("MyRefType", nothing) """ Test lists """ int_list_prop = CaosDB.Entity.create_property_entity( name = "IntProp", - datatype = "INTEGER", - is_list = true, + datatype = INTEGER, + collection = LIST, ) double_list_prop = CaosDB.Entity.create_property_entity( name = "DoubleProp", - datatype = "DOUBLE", - is_list = true, + datatype = DOUBLE, + collection = LIST, ) bool_list_prop = CaosDB.Entity.create_property_entity( name = "BoolProp", - datatype = "BOOLEAN", - is_list = true, + datatype = BOOLEAN, + collection = LIST, ) string_list_prop = CaosDB.Entity.create_property_entity( name = "StringProp", - datatype = "TEXT", - is_list = true, + datatype = TEXT, + collection = LIST, ) ref_list_prop = CaosDB.Entity.create_property_entity( name = "RefListProp", datatype = "MyRefType", - is_list = true, - is_reference = true, + collection = LIST, ) CaosDB.Entity.set_value(int_list_prop, [123, 456]) CaosDB.Entity.set_value(double_list_prop, [10.246, 3.14]) @@ -270,25 +263,39 @@ using CaosDB @test isa(CaosDB.Entity.get_value(bool_list_prop), Vector{Bool}) @test isa(CaosDB.Entity.get_value(string_list_prop), Vector{String}) @test isa(CaosDB.Entity.get_value(ref_list_prop), Vector{String}) - @test CaosDB.Entity.get_datatype(int_list_prop) == ("INTEGER", false, true) - @test CaosDB.Entity.get_datatype(double_list_prop) == ("DOUBLE", false, true) - @test CaosDB.Entity.get_datatype(bool_list_prop) == ("BOOLEAN", false, true) - @test CaosDB.Entity.get_datatype(string_list_prop) == ("TEXT", false, true) - @test CaosDB.Entity.get_datatype(ref_list_prop) == ("MyRefType", true, true) + @test CaosDB.Entity.get_datatype(int_list_prop) == (INTEGER, LIST) + @test CaosDB.Entity.get_datatype(double_list_prop) == (DOUBLE, LIST) + @test CaosDB.Entity.get_datatype(bool_list_prop) == (BOOLEAN, LIST) + @test CaosDB.Entity.get_datatype(string_list_prop) == (TEXT, LIST) + @test CaosDB.Entity.get_datatype(ref_list_prop) == ("MyRefType", LIST) + + # Check copying of values and datatypes + copied_prop = CaosDB.Entity.create_property_entity(name = "CopiedProp") + set_datatype(copied_prop, get_datatype(int_list_prop)) + set_value(copied_prop, get_value(int_list_prop)) + @test get_datatype(copied_prop) == get_datatype(int_list_prop) + @test get_value(copied_prop) == get_value(int_list_prop) + set_datatype(copied_prop, get_datatype(double_prop)) + set_value(copied_prop, get_value(double_prop)) + @test get_datatype(copied_prop) == get_datatype(double_prop) + @test get_value(copied_prop) == get_value(double_prop) + set_datatype(copied_prop, get_datatype(ref_list_prop)) + set_value(copied_prop, get_value(ref_list_prop)) + @test get_datatype(copied_prop) == get_datatype(ref_list_prop) + # TODO(fspreck) Fix this. Garbage collection? + @test_broken get_value(copied_prop) == get_value(ref_list_prop) + end + @testset "Property properties" begin - int_prop = CaosDB.Entity.create_property(name = "IntProp", datatype = "INTEGER") + int_prop = CaosDB.Entity.create_property(name = "IntProp", datatype = INTEGER) double_prop = - CaosDB.Entity.create_property(name = "DoubleProp", datatype = "DOUBLE") - bool_prop = - CaosDB.Entity.create_property(name = "BoolProp", datatype = "BOOLEAN") + CaosDB.Entity.create_property(name = "DoubleProp", datatype = DOUBLE) + bool_prop = CaosDB.Entity.create_property(name = "BoolProp", datatype = BOOLEAN) string_prop = - CaosDB.Entity.create_property(name = "StringProp", datatype = "TEXT") - ref_prop = CaosDB.Entity.create_property( - name = "RefProp", - datatype = "MyRefType", - is_reference = true, - ) + CaosDB.Entity.create_property(name = "StringProp", datatype = TEXT) + ref_prop = + CaosDB.Entity.create_property(name = "RefProp", datatype = "MyRefType") CaosDB.Entity.set_value(int_prop, 123) CaosDB.Entity.set_value(double_prop, 10.246) CaosDB.Entity.set_value(bool_prop, true) @@ -304,38 +311,37 @@ using CaosDB @test isa(CaosDB.Entity.get_value(bool_prop), Bool) @test isa(CaosDB.Entity.get_value(string_prop), String) @test isa(CaosDB.Entity.get_value(ref_prop), String) - @test CaosDB.Entity.get_datatype(int_prop) == ("INTEGER", false, false) - @test CaosDB.Entity.get_datatype(double_prop) == ("DOUBLE", false, false) - @test CaosDB.Entity.get_datatype(bool_prop) == ("BOOLEAN", false, false) - @test CaosDB.Entity.get_datatype(string_prop) == ("TEXT", false, false) - @test CaosDB.Entity.get_datatype(ref_prop) == ("MyRefType", true, false) + @test CaosDB.Entity.get_datatype(int_prop) == (INTEGER, nothing) + @test CaosDB.Entity.get_datatype(double_prop) == (DOUBLE, nothing) + @test CaosDB.Entity.get_datatype(bool_prop) == (BOOLEAN, nothing) + @test CaosDB.Entity.get_datatype(string_prop) == (TEXT, nothing) + @test CaosDB.Entity.get_datatype(ref_prop) == ("MyRefType", nothing) """ Test lists """ int_list_prop = CaosDB.Entity.create_property( name = "IntProp", - datatype = "INTEGER", - is_list = true, + datatype = INTEGER, + collection = LIST, ) double_list_prop = CaosDB.Entity.create_property( name = "DoubleProp", - datatype = "DOUBLE", - is_list = true, + datatype = DOUBLE, + collection = LIST, ) bool_list_prop = CaosDB.Entity.create_property( name = "BoolProp", - datatype = "BOOLEAN", - is_list = true, + datatype = BOOLEAN, + collection = LIST, ) string_list_prop = CaosDB.Entity.create_property( name = "StringProp", - datatype = "TEXT", - is_list = true, + datatype = TEXT, + collection = LIST, ) ref_list_prop = CaosDB.Entity.create_property( name = "RefListProp", datatype = "MyRefType", - is_list = true, - is_reference = true, + collection = LIST, ) CaosDB.Entity.set_value(int_list_prop, [123, 456]) CaosDB.Entity.set_value(double_list_prop, [10.246, 3.14]) @@ -352,11 +358,11 @@ using CaosDB @test isa(CaosDB.Entity.get_value(bool_list_prop), Vector{Bool}) @test isa(CaosDB.Entity.get_value(string_list_prop), Vector{String}) @test isa(CaosDB.Entity.get_value(ref_list_prop), Vector{String}) - @test CaosDB.Entity.get_datatype(int_list_prop) == ("INTEGER", false, true) - @test CaosDB.Entity.get_datatype(double_list_prop) == ("DOUBLE", false, true) - @test CaosDB.Entity.get_datatype(bool_list_prop) == ("BOOLEAN", false, true) - @test CaosDB.Entity.get_datatype(string_list_prop) == ("TEXT", false, true) - @test CaosDB.Entity.get_datatype(ref_list_prop) == ("MyRefType", true, true) + @test CaosDB.Entity.get_datatype(int_list_prop) == (INTEGER, LIST) + @test CaosDB.Entity.get_datatype(double_list_prop) == (DOUBLE, LIST) + @test CaosDB.Entity.get_datatype(bool_list_prop) == (BOOLEAN, LIST) + @test CaosDB.Entity.get_datatype(string_list_prop) == (TEXT, LIST) + @test CaosDB.Entity.get_datatype(ref_list_prop) == ("MyRefType", LIST) end end end