Skip to content

Commit 547827b

Browse files
committed
chore(merge): merged with other repo
1 parent 6945ef1 commit 547827b

12 files changed

+164
-92
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ Cargo.lock
88

99
# These are backup files generated by rustfmt
1010
**/*.rs.bk
11+
bindings.rs

Diff for: .idea/rustrdf-rs.iml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/data_store.rs

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use crate::{Error, ServerConnection};
2+
use std::fmt::{Display, Formatter};
3+
4+
#[derive(Clone)]
5+
pub struct DataStore {
6+
pub(crate) name: String,
7+
}
8+
9+
impl Display for DataStore {
10+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
11+
write!(f, "data store [{}]", self.name)
12+
}
13+
}
14+
15+
impl DataStore {
16+
pub fn define(name: &str) -> Self {
17+
Self {
18+
name: name.to_string(),
19+
}
20+
}
21+
22+
pub fn create(self, server_connection: &ServerConnection) -> Result<Self, Error> {
23+
server_connection.create_data_store(self)
24+
}
25+
}

Diff for: src/data_store_connection.rs

+35-15
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,58 @@
33

44
use std::ffi::{CStr, CString};
55
use std::fmt::{Display, Formatter};
6+
use std::os::unix::ffi::OsStrExt;
67
use std::panic::AssertUnwindSafe;
78
use std::path::Path;
89
use std::ptr;
10+
use std::time::Instant;
911

1012
use crate::{
1113
root::{
1214
CDataStoreConnection, CDataStoreConnection_getID, CDataStoreConnection_getUniqueID,
1315
CDataStoreConnection_importDataFromFile, CException, CUpdateType,
1416
},
15-
Error, Graph, Parameters, Prefixes, Statement, Transaction, TEXT_TURTLE,
17+
DataStore, Error, Graph, Parameters, Prefixes, Statement, Transaction, TEXT_TURTLE,
1618
};
1719

1820
pub struct DataStoreConnection {
21+
pub data_store: DataStore,
1922
pub(crate) inner: *mut CDataStoreConnection,
23+
started_at: Instant,
2024
}
2125

2226
impl Display for DataStoreConnection {
2327
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
24-
f.write_str("data store connection").unwrap();
25-
match self.get_id() {
26-
Ok(id) => write!(f, " id={}", id),
27-
Err(error) => write!(f, " id=({:?})", error),
28-
}
29-
.unwrap();
28+
f.write_str("connection").unwrap();
29+
// match self.get_id() {
30+
// Ok(id) => write!(f, " id={}", id),
31+
// Err(error) => write!(f, " id=({:?})", error)
32+
// }.unwrap();
3033
match self.get_unique_id() {
31-
Ok(id) => write!(f, " unique-id={}", id),
32-
Err(_error) => write!(f, " unique-id=(error could not get id)"),
34+
Ok(id) => write!(f, " {}", id),
35+
Err(_error) => write!(f, " (error could not get unique-id)"),
3336
}
37+
.unwrap();
38+
write!(f, " to {}", self.data_store)
39+
}
40+
}
41+
42+
impl Drop for DataStoreConnection {
43+
fn drop(&mut self) {
44+
let duration = self.started_at.elapsed();
45+
log::info!("dropped {self} after {:?}", duration)
3446
}
3547
}
3648

3749
impl DataStoreConnection {
50+
pub(crate) fn new(data_store: DataStore, inner: *mut CDataStoreConnection) -> Self {
51+
Self {
52+
data_store,
53+
inner,
54+
started_at: Instant::now(),
55+
}
56+
}
57+
3858
pub fn get_id(&self) -> Result<u32, Error> {
3959
let mut id: u32 = 0;
4060
CException::handle(AssertUnwindSafe(|| unsafe {
@@ -56,7 +76,10 @@ impl DataStoreConnection {
5676
where
5777
P: AsRef<Path>,
5878
{
59-
log::debug!(
79+
assert!(!self.inner.is_null(), "invalid datastore connection");
80+
81+
let rdf_file = file.as_ref().as_os_str().as_bytes();
82+
log::trace!(
6083
"Importing file {} into graph {:} of {:}",
6184
file.as_ref().display(),
6285
graph,
@@ -65,11 +88,9 @@ impl DataStoreConnection {
6588

6689
let c_graph_name = graph.as_c_string();
6790
let prefixes = Prefixes::default()?;
68-
let file_name = CString::new(file.as_ref().file_name().unwrap().to_str().unwrap()).unwrap();
91+
let file_name = CString::new(rdf_file).unwrap();
6992
let format_name = CString::new(TEXT_TURTLE.as_ref()).unwrap();
7093

71-
assert!(!self.inner.is_null());
72-
7394
CException::handle(|| unsafe {
7495
CDataStoreConnection_importDataFromFile(
7596
self.inner,
@@ -107,8 +128,7 @@ impl DataStoreConnection {
107128
// CDataStoreConnection_rollbackTransaction(dataStoreConnection);
108129
// return result;
109130
// }
110-
let parameters = Parameters::empty()?;
111-
parameters.fact_domain_all()?;
131+
let parameters = Parameters::empty()?.fact_domain_all()?;
112132

113133
let prefixes = Prefixes::default()?;
114134

Diff for: src/exception.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub enum Error {
1717
UNKNOWN,
1818
#[allow(dead_code)]
1919
UnknownResourceException,
20+
CouldNotConnectToServer,
2021
}
2122

2223
impl CException {

Diff for: src/lib.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ use lazy_static::lazy_static;
1111
pub use mime::Mime;
1212

1313
pub use cursor::Cursor;
14+
pub use data_store::DataStore;
1415
pub use data_store_connection::DataStoreConnection;
1516
pub use exception::Error;
1617
pub use graph::Graph;
1718
pub use parameters::Parameters;
1819
pub use prefixes::Prefixes;
1920
pub use role_creds::RoleCreds;
2021
pub use server::Server;
21-
pub use server_connection::Connection;
22+
pub use server_connection::ServerConnection;
2223
pub use statement::Statement;
2324
pub use transaction::Transaction;
2425

@@ -27,6 +28,7 @@ lazy_static! {
2728
}
2829

2930
mod cursor;
31+
mod data_store;
3032
mod data_store_connection;
3133
mod exception;
3234
mod graph;
@@ -36,7 +38,6 @@ mod role_creds;
3638
mod server;
3739
mod server_connection;
3840
mod statement;
39-
mod tests;
4041
mod transaction;
4142

4243
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));

Diff for: src/parameters.rs

+17-7
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,25 @@ use crate::root::{
99
};
1010
use crate::Error;
1111
use alloc::ffi::CString;
12+
use std::fmt::{Display, Formatter};
1213
use std::panic::AssertUnwindSafe;
1314
use std::ptr;
1415

1516
pub struct Parameters {
1617
pub(crate) inner: *mut CParameters,
1718
}
1819

20+
impl Display for Parameters {
21+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
22+
write!(f, "Parameters[]") // TODO: show keys and values (currently not possible)
23+
}
24+
}
25+
1926
impl Drop for Parameters {
2027
fn drop(&mut self) {
2128
unsafe {
22-
if !self.inner.is_null() {
23-
CParameters_destroy(self.inner);
24-
self.inner = ptr::null_mut();
25-
log::debug!("Destroyed params");
26-
}
29+
CParameters_destroy(self.inner);
30+
log::debug!("Destroyed params");
2731
}
2832
}
2933
}
@@ -47,7 +51,13 @@ impl Parameters {
4751
Ok(())
4852
}
4953

50-
pub fn fact_domain_all(&self) -> Result<(), Error> {
51-
self.set_string("fact-domain", "all")
54+
pub fn fact_domain_all(self) -> Result<Self, Error> {
55+
self.set_string("fact-domain", "all")?;
56+
Ok(self)
57+
}
58+
59+
pub fn switch_off_file_access_sandboxing(self) -> Result<Self, Error> {
60+
self.set_string("sandbox-directory", "")?;
61+
Ok(self)
5262
}
5363
}

Diff for: src/server.rs

+33-15
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,36 @@ use std::panic::AssertUnwindSafe;
66
use std::ptr;
77

88
use crate::exception::Error;
9+
use crate::Error::CouldNotConnectToServer;
910
use crate::{
1011
root::{
11-
CException, CParameters_getEmptyParameters, CServerConnection,
12-
CServerConnection_newServerConnection, CServer_createFirstLocalServerRole,
13-
CServer_startLocalServer,
12+
CException, CServerConnection, CServerConnection_newServerConnection,
13+
CServer_createFirstLocalServerRole, CServer_startLocalServer,
1414
},
15-
Connection, RoleCreds,
15+
Parameters, RoleCreds, ServerConnection,
1616
};
1717

18-
pub struct Server {}
18+
pub struct Server {
19+
default_role_creds: RoleCreds,
20+
}
1921

2022
impl Server {
21-
pub fn start(role_creds: &RoleCreds) -> Result<Self, Error> {
22-
log::debug!("Starting local RDFox server");
23-
CException::handle(|| unsafe {
24-
CServer_startLocalServer(CParameters_getEmptyParameters())
25-
})?;
23+
pub fn start(role_creds: RoleCreds) -> Result<Self, Error> {
24+
Self::start_with_parameters(role_creds, &Parameters::empty()?)
25+
}
2626

27-
let server = Server {};
27+
pub fn start_with_parameters(
28+
role_creds: RoleCreds,
29+
params: &Parameters,
30+
) -> Result<Self, Error> {
31+
log::debug!("Starting local RDFox server with {params}");
32+
CException::handle(|| unsafe { CServer_startLocalServer(params.inner) })?;
2833

29-
server.create_role(role_creds)?;
34+
let server = Server {
35+
default_role_creds: role_creds,
36+
};
37+
38+
server.create_role(&server.default_role_creds)?;
3039

3140
log::debug!("Local RDFox server has been started");
3241
Ok(server)
@@ -43,7 +52,11 @@ impl Server {
4352
Ok(())
4453
}
4554

46-
pub fn connection(&self, role_creds: &RoleCreds) -> Result<Connection, Error> {
55+
pub fn connection_with_default_role(&self) -> Result<ServerConnection, Error> {
56+
self.connection(&self.default_role_creds)
57+
}
58+
59+
pub fn connection(&self, role_creds: &RoleCreds) -> Result<ServerConnection, Error> {
4760
let c_role_name = CString::new(role_creds.role_name.as_str()).unwrap();
4861
let c_password = CString::new(role_creds.password.as_str()).unwrap();
4962
let mut server_connection_ptr: *mut CServerConnection = ptr::null_mut();
@@ -54,7 +67,12 @@ impl Server {
5467
&mut server_connection_ptr,
5568
)
5669
}))?;
57-
log::debug!("Established connection");
58-
Ok(Connection::new(role_creds, server_connection_ptr))
70+
if server_connection_ptr.is_null() {
71+
log::error!("Could not establish connection to server");
72+
Err(CouldNotConnectToServer)
73+
} else {
74+
log::debug!("Established connection to server");
75+
Ok(ServerConnection::new(role_creds, server_connection_ptr))
76+
}
5977
}
6078
}

Diff for: src/server_connection.rs

+17-16
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,22 @@ use crate::{
1212
CServerConnection_getNumberOfThreads, CServerConnection_newDataStoreConnection,
1313
CServerConnection_setNumberOfThreads,
1414
},
15-
DataStoreConnection, Error, RoleCreds,
15+
DataStore, DataStoreConnection, Error, RoleCreds,
1616
};
1717

18-
pub struct Connection {
18+
pub struct ServerConnection {
1919
#[allow(dead_code)]
2020
role_creds: RoleCreds,
2121
inner: *mut CServerConnection,
2222
}
2323

24-
impl Drop for Connection {
24+
impl Drop for ServerConnection {
2525
fn drop(&mut self) {
2626
self.destroy()
2727
}
2828
}
2929

30-
impl Connection {
30+
impl ServerConnection {
3131
pub(crate) fn new(
3232
role_creds: &RoleCreds,
3333
server_connection_ptr: *mut CServerConnection,
@@ -58,34 +58,35 @@ impl Connection {
5858
})
5959
}
6060

61-
pub fn create_data_store(&self, name: &str) -> Result<(), Error> {
62-
log::debug!("Creating data store [{}]", name);
63-
let c_name = CString::new(name).unwrap();
61+
pub fn create_data_store(&self, data_store: DataStore) -> Result<DataStore, Error> {
62+
log::debug!("Creating {data_store}");
63+
let c_name = CString::new(data_store.name.as_str()).unwrap();
6464
CException::handle(|| unsafe {
6565
CServerConnection_createDataStore(
6666
self.inner,
6767
c_name.as_ptr(),
6868
CParameters_getEmptyParameters(),
6969
)
7070
})?;
71-
log::info!("Created data store [{}]", name);
72-
Ok(())
71+
log::info!("Created {data_store}");
72+
Ok(data_store)
7373
}
7474

75-
pub fn connect_to_data_store(&self, name: &str) -> Result<DataStoreConnection, Error> {
76-
log::debug!("Connecting to data store [{}]", name);
77-
let mut ds_connection = DataStoreConnection {
78-
inner: ptr::null_mut(),
79-
};
80-
let c_name = CString::new(name).unwrap();
75+
pub fn connect_to_data_store(
76+
&self,
77+
data_store: DataStore,
78+
) -> Result<DataStoreConnection, Error> {
79+
log::debug!("Connecting to {}", data_store);
80+
let mut ds_connection = DataStoreConnection::new(data_store.clone(), ptr::null_mut());
81+
let c_name = CString::new(data_store.name.as_str()).unwrap();
8182
CException::handle(AssertUnwindSafe(|| unsafe {
8283
CServerConnection_newDataStoreConnection(
8384
self.inner,
8485
c_name.as_ptr(),
8586
&mut ds_connection.inner,
8687
)
8788
}))?;
88-
log::debug!("Connected to data store [{}]", name);
89+
log::debug!("Connected to {}", data_store);
8990
Ok(ds_connection)
9091
}
9192

Diff for: src/statement.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ impl<'a> Statement<'a> {
3131
connection: &DataStoreConnection,
3232
parameters: &Parameters,
3333
) -> Result<Cursor, Error> {
34-
Cursor::create(connection, parameters, self)
34+
Cursor::create(connection, &parameters, &self)
3535
}
3636
}

0 commit comments

Comments
 (0)