diff --git a/src/Entity.jl b/src/Entity.jl index 8f01a036a6b54ebe2ad1e295882744bbf7408264..90caff7808e8bcd72a69f111467897aac97cf639 100644 --- a/src/Entity.jl +++ b/src/Entity.jl @@ -80,10 +80,10 @@ using CaosDB # and C++ only understand all-capital strings for datatypes, # importances, roles. What about user input like "record_type", # "RecordType", "recordtype"? -""" +""" Struct containing a pointer to the wrapped cpp entity object. Meant for internal use; use `CaosDB.Entity.create_entity` to -create an entity. +create an entity. """ mutable struct _Entity wrapped_entity::Ptr{Cvoid} @@ -111,10 +111,10 @@ mutable struct _Entity end -""" +""" Struct containing a pointer to the wrapped cpp parent object. Meant for internal use; use `CaosDB.Entity.create_parent` to -create an parent. +create an parent. """ mutable struct _Parent wrapped_parent::Ptr{Cvoid} @@ -142,10 +142,10 @@ mutable struct _Parent end -""" +""" Struct containing a pointer to the wrapped cpp property object. Meant for internal use; use `CaosDB.Entity.create_property` to -create an property. +create an property. """ mutable struct _Property wrapped_property::Ptr{Cvoid} @@ -254,12 +254,15 @@ end ) Return a new entity object with role Record. If `name`, `datatype`, or -`unit` were provided, its name, datatype, or unit are set accordingly. +`unit` were provided, its name, datatype (including whether it is a +reference or a list), or unit are set accordingly. """ function create_property_entity(; name::AbstractString = "", datatype::AbstractString = "", unit::AbstractString = "", + is_reference::Bool = false, + is_list::Bool = false, ) property = create_entity(name) @@ -267,7 +270,7 @@ function create_property_entity(; set_role(property, "PROPERTY") if datatype != "" - set_datatype(property, datatype) + set_datatype(property, datatype, is_list = is_list, is_reference = is_reference) end if unit != "" @@ -297,6 +300,9 @@ function create_property(; name::AbstractString = "", id::AbstractString = "", value::AbstractString = "", + datatype::AbstractString = "", + is_reference::Bool = false, + is_list::Bool = false, ) property = Ref{_Property}(_Property(true)) @@ -317,6 +323,10 @@ function create_property(; set_id(property, id) end + if datatype != "" + set_datatype(property, datatype, is_reference = is_reference, is_list = is_list) + end + if value != "" set_value(property, value) end @@ -609,7 +619,7 @@ end function get_datatype(entity::Ref{_Entity}) Return a tuple that contains the name of the datatype of the given -`entity`, whether it is a reference, and whether it is a list. +`entity`, whether it is a reference, and whether it is a list. """ function get_datatype(entity::Ref{_Entity}) @@ -1264,7 +1274,7 @@ to set the id of entities. function set_id(entity::Ref{_Entity}, id::AbstractString) throw( CaosDB.Exceptions.ClientException( - "You cannot set the id of an entity object. + "You cannot set the id of an entity object. If you want to update an entity with this id, you have to retrieve it first.", ), ) @@ -1396,7 +1406,7 @@ end # too? """ function set_datatype( - entity::Ref{_Entity}, + entity::Ref{_Entity}, datatype::AbstractString; is_list::Bool = false, is_reference::Bool = false, @@ -1440,7 +1450,7 @@ end """ function set_datatype( - property::Ref{_Property}, + property::Ref{_Property}, datatype::AbstractString; is_list::Bool = false, is_reference::Bool = false,