ci: add sqlite tests (#253)

This commit is contained in:
QP Hou 2023-01-28 23:55:54 -08:00 committed by GitHub
parent 90e79dc7f0
commit c8e7b596ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 58 additions and 28 deletions

1
Cargo.lock generated
View File

@ -954,6 +954,7 @@ dependencies = [
"pretty_assertions",
"regex",
"reqwest",
"rusqlite",
"serde",
"serde_derive",
"serde_json",

View File

@ -63,6 +63,7 @@ serde_yaml = "0.8"
tempfile = "3.3.0"
pretty_assertions = "*"
dotenvy = "*"
rusqlite = "0"
[features]
default = ["rustls"]

View File

@ -109,31 +109,3 @@ mod imp {
}
pub use imp::*;
#[cfg(any(feature = "database-mysql"))]
#[cfg(test)]
mod tests {
use datafusion::datasource::TableProvider;
use datafusion::prelude::SessionContext;
use dotenvy::dotenv;
use std::env;
use crate::table::TableSource;
use super::*;
#[cfg(feature = "database-mysql")]
#[tokio::test]
async fn load_mysql() -> anyhow::Result<()> {
dotenv().ok();
if let Ok(name) = env::var("TABLE_NAME") {
let t = DatabaseLoader::MySQL
.to_mem_table(&TableSource::new(name, env::var("MYSQL_URL")?))?;
let ctx = SessionContext::new();
let stats = t.scan(&ctx.state(), &None, &[], None).await?.statistics();
assert!(stats.num_rows.is_some());
}
Ok(())
}
}

View File

@ -0,0 +1,24 @@
#[cfg(any(feature = "database-mysql"))]
mod mysql {
use datafusion::datasource::TableProvider;
use datafusion::prelude::SessionContext;
use std::env;
use columnq::table::TableSource;
use columnq::table::database::DatabaseLoader;
#[tokio::test]
async fn load_mysql() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
if let Ok(name) = env::var("TABLE_NAME") {
let t = DatabaseLoader::MySQL
.to_mem_table(&TableSource::new(name, env::var("MYSQL_URL")?))?;
let ctx = SessionContext::new();
let stats = t.scan(&ctx.state(), &None, &[], None).await?.statistics();
assert!(stats.num_rows.is_some());
}
Ok(())
}
}

View File

@ -0,0 +1,32 @@
#[cfg(any(feature = "database-sqlite"))]
mod sqlite {
use columnq::table::TableSource;
use columnq::ColumnQ;
#[tokio::test]
async fn text_column() -> anyhow::Result<()> {
let f = tempfile::NamedTempFile::new()?;
let conn = rusqlite::Connection::open(f.path())?;
conn.execute_batch(
"
CREATE TABLE users (name TEXT);
INSERT INTO users VALUES ('Alice');
INSERT INTO users VALUES ('Bob');
",
)?;
let mut cq = ColumnQ::new();
cq.load_table(&TableSource::new(
"users",
format!("sqlite://{}", f.path().to_str().unwrap()),
))
.await
.unwrap();
let batches = cq.query_sql("SELECT * FROM users").await.unwrap();
assert_eq!(batches[0].num_rows(), 2);
Ok(())
}
}