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

DRAFT: Begin implementation of entities

parent 4773e5ac
No related branches found
No related tags found
1 merge request!7ENH: Implement queries and entity retrieval
......@@ -214,7 +214,7 @@ end # Authentication
include("Connection.jl")
module Entity end
include("Entity.jl")
include("Transaction.jl")
......
# ** header v3.0
# This file is a part of the CaosDB Project.
#
# Copyright (C) 2021 Indiscale GmbH <info@indiscale.com>
# Copyright (C) 2021 Florian Spreckelsen <f.spreckelsen@indiscale.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
# ** end header
#
module Entity
export create_entity,
create_parent, create_property, create_property_entity, create_record, create_recordtype
export get_id, get_role, get_name
export set_id, set_role, set_name
using CaosDB
"""
Struct containing a pointer to the wrapped cpp entity
object. Meant for internal use; use `CaosDB.Entity.create_entity` to
create an entity.
"""
mutable struct _Entity
wrapped_entity::Ptr{Cvoid}
function _Entity(managed_by_julia::Bool = false)
entity = new()
if managed_by_julia
function f(t)
ccall(
(:caosdb_entity_delete_entity, CaosDB.library_name),
Cint,
(Ref{_Entity},),
Ref{_Entity}(t),
)
end
finalizer(f, entity)
end
return entity
end
end
"""
Struct containing a pointer to the wrapped cpp parent
object. Meant for internal use; use `CaosDB.Entity.create_parent` to
create an parent.
"""
mutable struct _Parent
wrapped_parent::Ptr{Cvoid}
function _Parent(managed_by_julia::Bool = false)
parent = new()
if managed_by_julia
function f(t)
ccall(
(:caosdb_entity_delete_parent, CaosDB.library_name),
Cint,
(Ref{_Parent},),
Ref{_Parent}(t),
)
end
finalizer(f, parent)
end
return parent
end
end
"""
Struct containing a pointer to the wrapped cpp property
object. Meant for internal use; use `CaosDB.Entity.create_property` to
create an property.
"""
mutable struct _Property
wrapped_property::Ptr{Cvoid}
function _Property(managed_by_julia::Bool = false)
property = new()
if managed_by_julia
function f(t)
ccall(
(:caosdb_entity_delete_property, CaosDB.library_name),
Cint,
(Ref{_Property},),
Ref{_Property}(t),
)
end
finalizer(f, property)
end
return property
end
end
"""
function create_entity(name::AbstractString = "")
Return a new entity object. If a `name` was provided, set the name of
the entity correspondingly.
"""
function create_entity(name::AbstractString = "")
entity = Ref{_Entity}(_Entity(true))
err_code = ccall(
(:caosdb_entity_create_entity, CaosDB.library_name),
Cint,
(Ref{_Entity},),
entity,
)
CaosDB.Exceptions.evaluate_return_code(err_code)
if name != ""
set_name(entity, name)
end
return entity
end
end
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