Skip to content
Snippets Groups Projects

ENH: Add minimal functionality

Merged Florian Spreckelsen requested to merge f-minimal into dev
1 file
+ 82
23
Compare changes
  • Side-by-side
  • Inline
+ 82
23
@@ -25,7 +25,7 @@ module Connection
using ..CaosDB
export connect
export connect, connect_manually
"""
Struct containing the actual connection to a CaosDB server. Meant for
@@ -35,11 +35,13 @@ to create an connection object from a configuration.
mutable struct _Connection
wrapped_connection::Ptr{Cvoid}
function _Connection()
function _Connection(managed_by_julia::Bool=false)
conn = new()
conn.wrapped_connection = C_NULL
function f(t)
if t.wrapped_connection != C_NULL
if managed_by_julia
# Only append a finalizer for this if the object is
# actually managed by Julia and not created and destroyed
# internally by libcaosdb.
function f(t)
ccall(
(:caosdb_connection_delete_connection, "libccaosdb"),
Cint,
@@ -47,8 +49,9 @@ mutable struct _Connection
Ref{_Connection}(t),
)
end
finalizer(f, conn)
end
finalizer(f, conn)
return conn
end
end
@@ -61,11 +64,13 @@ an certificate-provider object from a configuration.
mutable struct _CertificateProvider
wrapped_certificate_provider::Ptr{Cvoid}
function _CertificateProvider()
function _CertificateProvider(managed_by_julia::Bool=false)
prov = new()
prov.wrapped_certificate_provider = C_NULL
function f(t)
if t.wrapped_certificate_provider != C_NULL
if managed_by_julia
# Only append a finalizer for this if the object is
# actually managed by Julia and not created and destroyed
# internally by libcaosdb.
function f(t)
ccall(
(:caosdb_connection_delete_certificate_provider, "libccaosdb"),
Cint,
@@ -73,8 +78,9 @@ mutable struct _CertificateProvider
Ref{_CertificateProvider}(t),
)
end
finalizer(f, prov)
end
finalizer(f, prov)
return prov
end
end
@@ -87,11 +93,10 @@ an connection-configuration object from a configuration.
mutable struct _Configuration
wrapped_connection_configuration::Ptr{Cvoid}
function _Configuration()
function _Configuration(managed_by_julia::Bool=false)
config = new()
config.wrapped_connection_configuration = C_NULL
function f(t)
if t.wrapped_connection_configuration != C_NULL
if managed_by_julia
function f(t)
ccall(
(:caosdb_connection_delete_connection_configuration, "libccaosdb"),
Cint,
@@ -99,8 +104,9 @@ mutable struct _Configuration
Ref{_Configuration}(t),
)
end
finalizer(f, config)
end
finalizer(f, config)
return config
end
end
@@ -112,7 +118,7 @@ Return a `_CertificateProvider` for the pem certificate located at
"""
function create_pem_file_certificate_provider(path::AbstractString)
cert_provider = Ref{_CertificateProvider}(_CertificateProvider())
cert_provider = Ref{_CertificateProvider}(_CertificateProvider(true))
err_code = ccall(
(:caosdb_connection_create_pem_file_certificate_provider, "libccaosdb"),
@@ -149,7 +155,7 @@ function create_tls_connection_configuration(
provider::Ref{_CertificateProvider},
)
config = Ref{_Configuration}(_Configuration())
config = Ref{_Configuration}(_Configuration(true))
err_code = ccall(
(:caosdb_connection_create_tls_connection_configuration, "libccaosdb"),
@@ -180,7 +186,7 @@ end
function create_insecure_connection_configuration(host::AbstractString, port::Cint)
config = Ref{_Configuration}(_Configuration())
config = Ref{_Configuration}(_Configuration(true))
err_code = ccall(
(:caosdb_connection_create_insecure_connection_configuration, "libccaosdb"),
@@ -207,7 +213,7 @@ Return a connection based on the given `config`.
"""
function create_connection(config::Ref{_Configuration})
connection = Ref{_Connection}(_Connection())
connection = Ref{_Connection}(_Connection(true))
err_code = ccall(
(:caosdb_connection_create_connection, "libccaosdb"),
@@ -227,6 +233,39 @@ function create_connection(config::Ref{_Configuration})
end
function get_connection(name::AbstractString="default")
connection = Ref{_Connection}(_Connection())
if name == "default"
err_code = ccall(
(:caosdb_connection_connection_manager_get_default_connection, "libccaosdb"),
Cint,
(Ref{_Connection},),
connection
)
else
err_code = ccall(
(:caosdb_connection_connection_manager_get_connection, "libccaosdb"),
Cint,
(Ref{_Connection}, Cstring),
connection,
name
)
end
if err_code != 0
@error "Creating connection '$name' failed with code $err_code"
end
return connection
end
"""
get_version_info(con::Ref{_Connection})
@@ -235,7 +274,7 @@ to.
"""
function get_version_info(con::Ref{_Connection})
info = Ref{CaosDB.Info._VersionInfo}(CaosDB.Info._VersionInfo())
info = Ref{CaosDB.Info._VersionInfo}(CaosDB.Info._VersionInfo(true))
err_code = ccall(
(:caosdb_connection_get_version_info, "libccaosdb"),
@@ -280,7 +319,7 @@ function print_version_info(con::Ref{_Connection})
end
"""
function connect([;
function connect_manually([;
host::AbstractString="",
port_str::AbstractString="undefined",
cacert::AbstractString="",
@@ -325,7 +364,7 @@ SSL certificate located at `cacert` with the given credentials.
not defined, "caosdb" is used. The default value is "undefined"
rather than an empty string to allow an empty password.
"""
function connect(;
function connect_manually(;
host::AbstractString = "",
port_str::AbstractString = "undefined",
cacert::AbstractString = "",
@@ -376,4 +415,24 @@ function connect(;
end
"""
connect(name::AbstractString="default")
Create a connection with name `name` from your configuration file,
print the version of the server the connection is established to, and
return the connection object.
# Arguments
- name::AbstractString="default": The name of the configuration
defined in your config json that will be used to connect to the
CaosDB server defined therein. Default value is "default".
"""
function connect(name::AbstractString="default") conn = get_connection(name)
print_version_info(conn)
return conn
end
end # Connection
Loading