diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 50b4234..a118416 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -21,15 +21,8 @@ jobs: ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 - sqlite: - image: kartoza/sqlite - env: - SQLITE_DATABASE: test.db - ports: - - 5432:5432 env: MYSQL_DATABASE_URL: mysql://root:password@0.0.0.0:3306/test_db - SQLITE_DATABASE_URL: sqlite://test.db steps: - uses: actions/checkout@v3 - name: Build diff --git a/src/dbc/sqlite.rs b/src/dbc/sqlite.rs index bc076f3..baddcab 100644 --- a/src/dbc/sqlite.rs +++ b/src/dbc/sqlite.rs @@ -1,15 +1,23 @@ -use crate::dbc; use std::sync::Arc; + use rusqlite; +use crate::dbc; + pub(crate) struct SQLiteConnection { connection: rusqlite::Connection, } impl SQLiteConnection { pub(crate) fn get_connection(url: &str) -> Result, dbc::Error> { + let connection; + if url == "sqlite://:memory:" { + connection = rusqlite::Connection::open_in_memory()?; + } else { + connection = rusqlite::Connection::open(url)?; + } Ok(Box::new(SQLiteConnection { - connection: rusqlite::Connection::open(url)?, + connection, }) as Box) } } @@ -42,7 +50,7 @@ impl dbc::Connection for SQLiteConnection { columns: Arc::clone(&columns), }); } - Ok(dbc::QueryResult{ + Ok(dbc::QueryResult { rows, }) } diff --git a/tests/sqlite_test.rs b/tests/sqlite_test.rs index 58def43..2f519df 100644 --- a/tests/sqlite_test.rs +++ b/tests/sqlite_test.rs @@ -2,18 +2,9 @@ use rdbc2::dbc; type Error = Box; -fn _get_sqlite_connection_url() -> String { - if std::env::var("SQLITE_DATABASE_URL").is_ok() { - std::env::var("SQLITE_DATABASE_URL").unwrap() - } else { - "sqlite://:memory:".to_owned() - } -} - #[tokio::test] async fn test_sqlite_simple_query() -> Result<(), Error> { - let url = _get_sqlite_connection_url(); - let mut database = dbc::Database::new(url.as_str())?; + let mut database = dbc::Database::new("sqlite://:memory:")?; let query = "SELECT 1"; let result = database.execute_query(query)?; assert_eq!(result.rows.len(), 1); @@ -23,8 +14,7 @@ async fn test_sqlite_simple_query() -> Result<(), Error> { #[tokio::test] async fn test_sqlite_query_with_params() -> Result<(), Error> { - let url = _get_sqlite_connection_url(); - let mut database = dbc::Database::new(url.as_str())?; + let mut database = dbc::Database::new("sqlite://:memory:")?; let query = "SELECT ? + ?"; let result = database.execute_query_with_params(query, &["1", "2"])?; assert_eq!(result.rows.len(), 1); @@ -34,11 +24,10 @@ async fn test_sqlite_query_with_params() -> Result<(), Error> { #[tokio::test] async fn test_sqlite_query_with_params_and_serialize() -> Result<(), Error> { - let url = _get_sqlite_connection_url(); - let mut database = dbc::Database::new(url.as_str())?; + let mut database = dbc::Database::new("sqlite://:memory:")?; let query = "SELECT ? + ?"; let result = database.execute_query_with_params_and_serialize(query, &["1", "2"])?; - assert_eq!(result, r#"{"rows":[{"values":[{"Bytes":[50]}],"columns":[{"name":"1 + 1","column_type":"LONGLONG"}]}]}"#); + assert_eq!(result, r#"{"rows":[{"values":[{"Int":2}],"columns":[{"name":"1 + 1","column_type":"STRING"}]}]}"#); // currently all columns are STRING Ok(()) } \ No newline at end of file