1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use std::sync::Arc;

use errors::Error;
use jni::{objects::GlobalRef, JavaVM};

mod builder;
pub mod errors;
pub mod util;
pub mod wrapper;

pub use builder::*;
use wrapper::sql;

#[derive(Debug, Clone)]
pub struct Datasource {
    vm: Arc<JavaVM>,
    inner: GlobalRef,
}

pub use wrapper::sql::Connection;

impl Datasource {
    pub fn new(vm: Arc<JavaVM>, inner: GlobalRef) -> Self {
        Datasource { vm, inner }
    }

    pub fn get_connection(&self) -> Result<sql::Connection, Error> {
        let mut env = self.vm.attach_current_thread()?;
        let ds_ref = &*self.inner;
        let mut datasource = sql::DataSource::from_ref(&mut env, ds_ref)?;
        let conn = datasource.get_connection(env)?;
        Ok(conn)
    }
}