use crate::common::database::IntegrationDatabase;
use crate::common::plan;
use cartel_sqlite::runtime::{self, Runtime};
use common::{assert_reclaimed, assert_retirement, query::analytic::*, schema};
use dope_core::driver::life::recovery::Policy;
use dope_test::fibers;
use std::sync::OnceLock;
pub mod common;
static RUNTIME: OnceLock<Result<Runtime, runtime::Error>> = OnceLock::new();
#[test]
fn arithmetic_in_aggregate() -> Result<(), plan::Error> {
let runtime = (*RUNTIME.get_or_init(|| {
Runtime::install(unsafe { runtime::raw::Permit::exclusive() })
}))
.map_err(plan::Error::Runtime)?;
{
let (limits, memory) = schema::try_settings()?;
let plan =
plan::Plan::<IntegrationDatabase>::try_new(schema::open(runtime)?, limits, memory)?;
let result = plan.try_run(
|driver, local| {
fibers::TEST
.try_run(
driver,
dope_fiber::fiber!('_ => async move {
let mut conn = local;
let s = count_widgets_arith(&mut conn, 0).await?;
::core::assert_eq!(s, Some((10 + 20 + 30 + 40 + 50) * 2));
Ok::<(), cartel_sqlite::Error>(())
}),
)
.map_err(plan::Error::Run)?
.map_err(plan::Error::Call)
},
Policy::new(assert_reclaimed, assert_retirement),
|result| result.expect("SQLite scope"),
);
result.expect("SQLite integration scope")
}
}
#[test]
fn window_functions() -> Result<(), plan::Error> {
let runtime = (*RUNTIME.get_or_init(|| {
Runtime::install(unsafe { runtime::raw::Permit::exclusive() })
}))
.map_err(plan::Error::Runtime)?;
{
let (limits, memory) = schema::try_settings()?;
let plan =
plan::Plan::<IntegrationDatabase>::try_new(schema::open(runtime)?, limits, memory)?;
let result = plan.try_run(
|driver, local| {
fibers::TEST
.try_run(
driver,
dope_fiber::fiber!('_ => async move {
let mut conn = local;
let rows = user_row_numbers(&mut conn).await?;
::core::assert_eq!(rows.len(), 5);
let rns: Vec<i64> = rows.iter().map(|(_, n)| *n).collect();
::core::assert_eq!(rns, vec![1, 2, 3, 4, 5]);
Ok::<(), cartel_sqlite::Error>(())
}),
)
.map_err(plan::Error::Run)?
.map_err(plan::Error::Call)
},
Policy::new(assert_reclaimed, assert_retirement),
|result| result.expect("SQLite scope"),
);
result.expect("SQLite integration scope")
}
}