Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions bindings/dart/lib/src/database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -868,27 +868,27 @@ class Database {
}

/// Returns the structure and data type of an attribute.
({String structure, String dataType}) getAttributeType(String collection, String attribute) {
({String dataStructure, String dataType}) getAttributeType(String collection, String attribute) {
_ensureNotClosed();

final arena = Arena();
try {
final outStructure = arena<Int32>();
final outDataStructure = arena<Int32>();
final outDataType = arena<Int32>();

final err = bindings.psr_database_get_attribute_type(
_ptr,
collection.toNativeUtf8(allocator: arena).cast(),
attribute.toNativeUtf8(allocator: arena).cast(),
outStructure,
outDataStructure,
outDataType,
);

if (err != psr_error_t.PSR_OK) {
throw DatabaseException.fromError(err, "Failed to get attribute type for '$collection.$attribute'");
}

final structure = switch (outStructure.value) {
final dataStructure = switch (outDataStructure.value) {
0 => 'scalar',
1 => 'vector',
2 => 'set',
Expand All @@ -902,7 +902,7 @@ class Database {
_ => 'unknown',
};

return (structure: structure, dataType: dataType);
return (dataStructure: dataStructure, dataType: dataType);
} finally {
arena.releaseAll();
}
Expand Down
106 changes: 53 additions & 53 deletions bindings/dart/lib/src/ffi/bindings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,45 @@ class PsrDatabaseBindings {
late final _psr_database_create_element = _psr_database_create_elementPtr
.asFunction<int Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, ffi.Pointer<psr_element_t>)>();

int psr_database_update_element(
ffi.Pointer<psr_database_t> db,
ffi.Pointer<ffi.Char> collection,
int id,
ffi.Pointer<psr_element_t> element,
) {
return _psr_database_update_element(
db,
collection,
id,
element,
);
}

late final _psr_database_update_elementPtr = _lookup<
ffi.NativeFunction<
ffi.Int32 Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, ffi.Int64,
ffi.Pointer<psr_element_t>)>>('psr_database_update_element');
late final _psr_database_update_element = _psr_database_update_elementPtr
.asFunction<int Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, int, ffi.Pointer<psr_element_t>)>();

int psr_database_delete_element_by_id(
ffi.Pointer<psr_database_t> db,
ffi.Pointer<ffi.Char> collection,
int id,
) {
return _psr_database_delete_element_by_id(
db,
collection,
id,
);
}

late final _psr_database_delete_element_by_idPtr =
_lookup<ffi.NativeFunction<ffi.Int32 Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, ffi.Int64)>>(
'psr_database_delete_element_by_id');
late final _psr_database_delete_element_by_id = _psr_database_delete_element_by_idPtr
.asFunction<int Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, int)>();

int psr_database_set_scalar_relation(
ffi.Pointer<psr_database_t> db,
ffi.Pointer<ffi.Char> collection,
Expand Down Expand Up @@ -788,14 +827,14 @@ class PsrDatabaseBindings {
ffi.Pointer<psr_database_t> db,
ffi.Pointer<ffi.Char> collection,
ffi.Pointer<ffi.Char> attribute,
ffi.Pointer<ffi.Int32> out_structure,
ffi.Pointer<ffi.Int32> out_data_structure,
ffi.Pointer<ffi.Int32> out_data_type,
) {
return _psr_database_get_attribute_type(
db,
collection,
attribute,
out_structure,
out_data_structure,
out_data_type,
);
}
Expand Down Expand Up @@ -1034,45 +1073,6 @@ class PsrDatabaseBindings {
int Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, ffi.Pointer<ffi.Char>, int,
ffi.Pointer<ffi.Pointer<ffi.Char>>, int)>();

int psr_database_delete_element_by_id(
ffi.Pointer<psr_database_t> db,
ffi.Pointer<ffi.Char> collection,
int id,
) {
return _psr_database_delete_element_by_id(
db,
collection,
id,
);
}

late final _psr_database_delete_element_by_idPtr =
_lookup<ffi.NativeFunction<ffi.Int32 Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, ffi.Int64)>>(
'psr_database_delete_element_by_id');
late final _psr_database_delete_element_by_id = _psr_database_delete_element_by_idPtr
.asFunction<int Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, int)>();

int psr_database_update_element(
ffi.Pointer<psr_database_t> db,
ffi.Pointer<ffi.Char> collection,
int id,
ffi.Pointer<psr_element_t> element,
) {
return _psr_database_update_element(
db,
collection,
id,
element,
);
}

late final _psr_database_update_elementPtr = _lookup<
ffi.NativeFunction<
ffi.Int32 Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, ffi.Int64,
ffi.Pointer<psr_element_t>)>>('psr_database_update_element');
late final _psr_database_update_element = _psr_database_update_elementPtr
.asFunction<int Function(ffi.Pointer<psr_database_t>, ffi.Pointer<ffi.Char>, int, ffi.Pointer<psr_element_t>)>();

void psr_free_int_array(
ffi.Pointer<ffi.Int64> values,
) {
Expand Down Expand Up @@ -1486,18 +1486,6 @@ abstract class psr_log_level_t {
static const int PSR_LOG_OFF = 4;
}

abstract class psr_attribute_structure_t {
static const int PSR_ATTRIBUTE_SCALAR = 0;
static const int PSR_ATTRIBUTE_VECTOR = 1;
static const int PSR_ATTRIBUTE_SET = 2;
}

abstract class psr_data_type_t {
static const int PSR_DATA_TYPE_INTEGER = 0;
static const int PSR_DATA_TYPE_REAL = 1;
static const int PSR_DATA_TYPE_TEXT = 2;
}

final class psr_database_options_t extends ffi.Struct {
@ffi.Int()
external int read_only;
Expand All @@ -1506,6 +1494,18 @@ final class psr_database_options_t extends ffi.Struct {
external int console_level;
}

abstract class psr_data_structure_t {
static const int PSR_DATA_STRUCTURE_SCALAR = 0;
static const int PSR_DATA_STRUCTURE_VECTOR = 1;
static const int PSR_DATA_STRUCTURE_SET = 2;
}

abstract class psr_data_type_t {
static const int PSR_DATA_TYPE_INTEGER = 0;
static const int PSR_DATA_TYPE_REAL = 1;
static const int PSR_DATA_TYPE_TEXT = 2;
}

final class psr_database extends ffi.Opaque {}

typedef psr_database_t = psr_database;
Expand Down
12 changes: 6 additions & 6 deletions bindings/dart/test/read_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,7 @@ void main() {
);
try {
final result = db.getAttributeType('Configuration', 'integer_attribute');
expect(result.structure, equals('scalar'));
expect(result.dataStructure, equals('scalar'));
expect(result.dataType, equals('integer'));
} finally {
db.close();
Expand All @@ -636,7 +636,7 @@ void main() {
);
try {
final result = db.getAttributeType('Configuration', 'float_attribute');
expect(result.structure, equals('scalar'));
expect(result.dataStructure, equals('scalar'));
expect(result.dataType, equals('real'));
} finally {
db.close();
Expand All @@ -650,7 +650,7 @@ void main() {
);
try {
final result = db.getAttributeType('Configuration', 'string_attribute');
expect(result.structure, equals('scalar'));
expect(result.dataStructure, equals('scalar'));
expect(result.dataType, equals('text'));
} finally {
db.close();
Expand All @@ -664,7 +664,7 @@ void main() {
);
try {
final result = db.getAttributeType('Collection', 'value_int');
expect(result.structure, equals('vector'));
expect(result.dataStructure, equals('vector'));
expect(result.dataType, equals('integer'));
} finally {
db.close();
Expand All @@ -678,7 +678,7 @@ void main() {
);
try {
final result = db.getAttributeType('Collection', 'value_float');
expect(result.structure, equals('vector'));
expect(result.dataStructure, equals('vector'));
expect(result.dataType, equals('real'));
} finally {
db.close();
Expand All @@ -692,7 +692,7 @@ void main() {
);
try {
final result = db.getAttributeType('Collection', 'tag');
expect(result.structure, equals('set'));
expect(result.dataStructure, equals('set'));
expect(result.dataType, equals('text'));
} finally {
db.close();
Expand Down
8 changes: 4 additions & 4 deletions bindings/julia/src/PSRDatabase.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ include("lua_runner.jl")

export Element, Database, LuaRunner, DatabaseException
export get_attribute_type
export PSR_ATTRIBUTE_SCALAR, PSR_ATTRIBUTE_VECTOR, PSR_ATTRIBUTE_SET
export PSR_DATA_STRUCTURE_SCALAR, PSR_DATA_STRUCTURE_VECTOR, PSR_DATA_STRUCTURE_SET
export PSR_DATA_TYPE_INTEGER, PSR_DATA_TYPE_REAL, PSR_DATA_TYPE_TEXT

# Re-export enums from C module
const PSR_ATTRIBUTE_SCALAR = C.PSR_ATTRIBUTE_SCALAR
const PSR_ATTRIBUTE_VECTOR = C.PSR_ATTRIBUTE_VECTOR
const PSR_ATTRIBUTE_SET = C.PSR_ATTRIBUTE_SET
const PSR_DATA_STRUCTURE_SCALAR = C.PSR_DATA_STRUCTURE_SCALAR
const PSR_DATA_STRUCTURE_VECTOR = C.PSR_DATA_STRUCTURE_VECTOR
const PSR_DATA_STRUCTURE_SET = C.PSR_DATA_STRUCTURE_SET
const PSR_DATA_TYPE_INTEGER = C.PSR_DATA_TYPE_INTEGER
const PSR_DATA_TYPE_REAL = C.PSR_DATA_TYPE_REAL
const PSR_DATA_TYPE_TEXT = C.PSR_DATA_TYPE_TEXT
Expand Down
44 changes: 22 additions & 22 deletions bindings/julia/src/c_api.jl
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,6 @@ const libpsr_database_c = joinpath(@__DIR__, "..", "..", "..", "build", library_
PSR_ERROR_NOT_FOUND = -6
end

@cenum psr_attribute_structure_t::Int32 begin
PSR_ATTRIBUTE_SCALAR = 0
PSR_ATTRIBUTE_VECTOR = 1
PSR_ATTRIBUTE_SET = 2
end

@cenum psr_data_type_t::Int32 begin
PSR_DATA_TYPE_INTEGER = 0
PSR_DATA_TYPE_REAL = 1
PSR_DATA_TYPE_TEXT = 2
end

function psr_error_string(error)
@ccall libpsr_database_c.psr_error_string(error::psr_error_t)::Ptr{Cchar}
end
Expand All @@ -70,6 +58,18 @@ struct psr_database_options_t
console_level::psr_log_level_t
end

@cenum psr_data_structure_t::UInt32 begin
PSR_DATA_STRUCTURE_SCALAR = 0
PSR_DATA_STRUCTURE_VECTOR = 1
PSR_DATA_STRUCTURE_SET = 2
end

@cenum psr_data_type_t::UInt32 begin
PSR_DATA_TYPE_INTEGER = 0
PSR_DATA_TYPE_REAL = 1
PSR_DATA_TYPE_TEXT = 2
end

function psr_database_options_default()
@ccall libpsr_database_c.psr_database_options_default()::psr_database_options_t
end
Expand Down Expand Up @@ -114,6 +114,14 @@ function psr_database_create_element(db, collection, element)
@ccall libpsr_database_c.psr_database_create_element(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, element::Ptr{psr_element_t})::Int64
end

function psr_database_update_element(db, collection, id, element)
@ccall libpsr_database_c.psr_database_update_element(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, id::Int64, element::Ptr{psr_element_t})::psr_error_t
end

function psr_database_delete_element_by_id(db, collection, id)
@ccall libpsr_database_c.psr_database_delete_element_by_id(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, id::Int64)::psr_error_t
end

function psr_database_set_scalar_relation(db, collection, attribute, from_label, to_label)
@ccall libpsr_database_c.psr_database_set_scalar_relation(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, attribute::Ptr{Cchar}, from_label::Ptr{Cchar}, to_label::Ptr{Cchar})::psr_error_t
end
Expand Down Expand Up @@ -198,8 +206,8 @@ function psr_database_read_element_ids(db, collection, out_ids, out_count)
@ccall libpsr_database_c.psr_database_read_element_ids(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, out_ids::Ptr{Ptr{Int64}}, out_count::Ptr{Csize_t})::psr_error_t
end

function psr_database_get_attribute_type(db, collection, attribute, out_structure, out_data_type)
@ccall libpsr_database_c.psr_database_get_attribute_type(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, attribute::Ptr{Cchar}, out_structure::Ptr{psr_attribute_structure_t}, out_data_type::Ptr{psr_data_type_t})::psr_error_t
function psr_database_get_attribute_type(db, collection, attribute, out_data_structure, out_data_type)
@ccall libpsr_database_c.psr_database_get_attribute_type(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, attribute::Ptr{Cchar}, out_data_structure::Ptr{psr_data_structure_t}, out_data_type::Ptr{psr_data_type_t})::psr_error_t
end

function psr_database_update_scalar_integer(db, collection, attribute, id, value)
Expand Down Expand Up @@ -238,14 +246,6 @@ function psr_database_update_set_strings(db, collection, attribute, id, values,
@ccall libpsr_database_c.psr_database_update_set_strings(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, attribute::Ptr{Cchar}, id::Int64, values::Ptr{Ptr{Cchar}}, count::Csize_t)::psr_error_t
end

function psr_database_delete_element_by_id(db, collection, id)
@ccall libpsr_database_c.psr_database_delete_element_by_id(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, id::Int64)::psr_error_t
end

function psr_database_update_element(db, collection, id, element)
@ccall libpsr_database_c.psr_database_update_element(db::Ptr{psr_database_t}, collection::Ptr{Cchar}, id::Int64, element::Ptr{psr_element_t})::psr_error_t
end

function psr_free_int_array(values)
@ccall libpsr_database_c.psr_free_int_array(values::Ptr{Int64})::Cvoid
end
Expand Down
6 changes: 3 additions & 3 deletions bindings/julia/src/database.jl
Original file line number Diff line number Diff line change
Expand Up @@ -510,15 +510,15 @@ function read_element_ids(db::Database, collection::String)
end

function get_attribute_type(db::Database, collection::String, attribute::String)
out_structure = Ref{C.psr_attribute_structure_t}(C.PSR_ATTRIBUTE_SCALAR)
out_data_structure = Ref{C.psr_data_structure_t}(C.PSR_DATA_STRUCTURE_SCALAR)
out_data_type = Ref{C.psr_data_type_t}(C.PSR_DATA_TYPE_INTEGER)

err = C.psr_database_get_attribute_type(db.ptr, collection, attribute, out_structure, out_data_type)
err = C.psr_database_get_attribute_type(db.ptr, collection, attribute, out_data_structure, out_data_type)
if err != C.PSR_OK
throw(DatabaseException("Failed to get attribute type for '$collection.$attribute'"))
end

return (structure = out_structure[], data_type = out_data_type[])
return (data_structure = out_data_structure[], data_type = out_data_type[])
end

function delete_element_by_id!(db::Database, collection::String, id::Int64)
Expand Down
Loading
Loading