#![allow(dead_code, unused_macros)]
use std::future::Future;
use sqlx::{Database as Backend, Pool};
#[cfg(feature = "mysql")]
pub(crate) mod mysql;
#[cfg(feature = "postgres")]
pub(crate) mod postgres;
#[cfg(all(feature = "chrono", feature = "json"))]
pub(crate) mod rows;
#[cfg(feature = "sqlite")]
pub(crate) mod sqlite;
#[cfg(feature = "mysql")]
pub(crate) mod mariadb {
pub(crate) use super::mysql::Db;
use ruststream_sqlx::dialect;
use super::Database;
pub(crate) const URL: &str = "MARIADB_TEST_URL";
pub(crate) const DIALECT: dialect::MySql = super::mysql::DIALECT;
pub(crate) async fn database() -> Option<Database<Db>> {
super::mysql::database_on(URL).await
}
}
pub(crate) const REQUIRE_LIVE: &str = "RUSTSTREAM_REQUIRE_LIVE";
fn required() -> bool {
std::env::var(REQUIRE_LIVE).is_ok_and(|value| !value.is_empty())
}
pub(crate) fn url(variable: &str) -> Option<String> {
match std::env::var(variable) {
Ok(url) if !url.is_empty() => Some(url),
_ => {
assert!(
!required(),
"{REQUIRE_LIVE} is set, so this suite must run, but {variable} is unset or empty"
);
eprintln!("{variable} is not set; skipping the live suite");
None
}
}
}
pub(crate) async fn unpaused<T>(read: impl Future<Output = T>) -> T {
tokio::time::resume();
let value = read.await;
tokio::time::pause();
value
}
pub(crate) struct Database<DB: Backend> {
pub(crate) pool: Pool<DB>,
name: String,
url: String,
keeper: Option<DB::Connection>,
}
macro_rules! matrix {
($($items:item)*) => {
$crate::live::fifo_matrix! { $($items)* }
#[cfg(feature = "postgres")]
mod postgres_advisory {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::postgres::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::advisory::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mysql_advisory {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mysql::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::advisory::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mariadb_advisory {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mariadb::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::advisory::*;
$($items)*
}
#[cfg(feature = "sqlite")]
mod sqlite_advisory {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::sqlite::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::advisory::*;
$($items)*
}
};
}
macro_rules! fifo_matrix {
($($items:item)*) => {
$crate::live::server_matrix! { $($items)* }
#[cfg(feature = "sqlite")]
mod sqlite_lease {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::sqlite::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::lease::*;
$($items)*
}
};
}
macro_rules! server_matrix {
($($items:item)*) => {
#[cfg(feature = "postgres")]
mod postgres_row_lock {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::postgres::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::row_lock::*;
$($items)*
}
#[cfg(feature = "postgres")]
mod postgres_lease {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::postgres::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::lease::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mysql_row_lock {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mysql::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::row_lock::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mysql_lease {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mysql::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::lease::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mariadb_row_lock {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mariadb::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::row_lock::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mariadb_lease {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mariadb::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::lease::*;
$($items)*
}
};
}
macro_rules! stands {
($($items:item)*) => {
$crate::live::row_lock_stands! { $($items)* }
#[cfg(feature = "sqlite")]
mod sqlite {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::sqlite::{Db, database};
$($items)*
}
};
}
macro_rules! lease_stands {
($($items:item)*) => {
#[cfg(feature = "postgres")]
mod postgres_lease {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::postgres::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::lease::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mysql_lease {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mysql::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::lease::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mariadb_lease {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mariadb::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::lease::*;
$($items)*
}
#[cfg(feature = "sqlite")]
mod sqlite_lease {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::sqlite::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::lease::*;
$($items)*
}
};
}
macro_rules! advisory_stands {
($($items:item)*) => {
$crate::live::advisory_server_stands! { $($items)* }
#[cfg(feature = "sqlite")]
mod sqlite {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::sqlite::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::advisory::*;
$($items)*
}
};
}
macro_rules! advisory_server_stands {
($($items:item)*) => {
#[cfg(feature = "postgres")]
mod postgres {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::postgres::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::advisory::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mysql {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mysql::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::advisory::*;
$($items)*
}
#[cfg(feature = "mysql")]
mod mariadb {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mariadb::{DIALECT, Db, database};
#[allow(unused_imports)]
use crate::live::rows::advisory::*;
$($items)*
}
};
}
macro_rules! row_lock_stands {
($($items:item)*) => {
#[cfg(feature = "postgres")]
mod postgres {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::postgres::{Db, database};
$($items)*
}
$crate::live::mysql_stands! { $($items)* }
};
}
macro_rules! mysql_stands {
($($items:item)*) => {
#[cfg(feature = "mysql")]
mod mysql {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mysql::{Db, database};
$($items)*
}
#[cfg(feature = "mysql")]
mod mariadb {
#[allow(unused_imports)]
use super::*;
#[allow(unused_imports)]
use crate::live::mariadb::{Db, database};
$($items)*
}
};
}
#[allow(unused_imports)]
pub(crate) use {
advisory_server_stands, advisory_stands, fifo_matrix, lease_stands, matrix, mysql_stands,
row_lock_stands, server_matrix, stands,
};