jdbc 0.1.0

Rust bindings to the Java Jdbc.
Documentation
use chrono::Utc;

#[macro_use]
extern crate lazy_static;
mod util;

#[test]
fn test() -> Result<(), jdbc::errors::Error> {
    let ds = util::sqlite();
    let conn = ds.get_connection()?;

    let statement = conn.prepare_statement("select ?")?.set_string(1, "value")?;
    let result = statement.execute_query()?;
    assert_eq!(result.next()?, true);
    assert_eq!(result.get_string(1)?, Some("value".into()));

    Ok(())
}

#[test]
fn test_time() -> Result<(), jdbc::errors::Error> {
    let ds = util::sqlite();
    let conn = ds.get_connection()?;
    let statement =
        conn.prepare_statement(r#"select strftime("%Y-%m-%d %H:%M:%f", "now") as now"#)?;
    let now_timestamp = Utc::now().timestamp_millis();
    let result = statement.execute_query()?;

    assert_eq!(result.next()?, true);
    let timestamp = result.get_timestamp_millis(1)?.unwrap_or(0);
    assert!((now_timestamp - timestamp).abs() < 1000);
    let timestamp = result.get_timestamp_millis_by_label("now")?.unwrap_or(0);
    assert!((now_timestamp - timestamp).abs() < 1000);

    Ok(())
}

#[test]
fn test_null() -> Result<(), jdbc::errors::Error> {
    let ds = util::sqlite();
    let conn = ds.get_connection()?;

    let statement = conn.prepare_statement("select NULL")?;
    let result = statement.execute_query()?;
    assert_eq!(result.next()?, true);

    assert_eq!(result.get_string(1)?, None);
    assert_eq!(result.get_timestamp_millis(1)?, None);

    assert_eq!(result.was_null()?, true);
    Ok(())
}

#[cfg(feature = "chrono")]
#[test]
fn test_chrono() -> Result<(), jdbc::errors::Error> {
    let ds = util::sqlite();
    let conn = ds.get_connection()?;
    let statement =
        conn.prepare_statement(r#"select strftime("%Y-%m-%d %H:%M:%f", "now") as now"#)?;
    let now_timestamp = Utc::now().timestamp_millis();
    let result = statement.execute_query()?;

    let local = result.get_local_time(1)?.unwrap();
    assert!((now_timestamp - local.timestamp_millis()).abs() < 1000);
    let local = result.get_local_time_by_label("now")?.unwrap();
    assert!((now_timestamp - local.timestamp_millis()).abs() < 1000);

    let local = result.get_utc_time(1)?.unwrap();
    assert!((now_timestamp - local.timestamp_millis()).abs() < 1000);
    let local = result.get_utc_time_by_label("now")?.unwrap();
    assert!((now_timestamp - local.timestamp_millis()).abs() < 1000);

    let statement = conn.prepare_statement("select NULL")?;
    let result = statement.execute_query()?;
    assert_eq!(result.get_local_time(1)?, None);
    assert_eq!(result.get_utc_time(1)?, None);
    Ok(())
}