1use std::sync::Arc;
2
3use errors::Error;
4use jni::{objects::GlobalRef, JavaVM};
5
6mod builder;
7pub mod errors;
8pub mod util;
9pub mod wrapper;
10
11pub use builder::*;
12use wrapper::sql;
13
14#[derive(Debug, Clone)]
15pub struct Datasource {
16 vm: Arc<JavaVM>,
17 inner: GlobalRef,
18}
19
20pub use wrapper::sql::Connection;
21
22impl Datasource {
23 pub fn new(vm: Arc<JavaVM>, inner: GlobalRef) -> Self {
24 Datasource { vm, inner }
25 }
26
27 pub fn get_connection(&self) -> Result<sql::Connection, Error> {
28 let mut env = self.vm.attach_current_thread()?;
29 let ds_ref = &*self.inner;
30 let mut datasource = sql::DataSource::from_ref(&mut env, ds_ref)?;
31 let conn = datasource.get_connection(env)?;
32 Ok(conn)
33 }
34}