use toolu_orm_core::dialect::Dialect;
use toolu_orm_core::expr::Expr;
use toolu_orm_core::value::Value;
pub(crate) fn append_where_for(
filters: &[Expr],
sql: &mut String,
params: &mut Vec<Value>,
dialect: Dialect,
) {
if filters.is_empty() {
return;
}
sql.push_str(" WHERE ");
let mut first = true;
for filter in filters {
let start = params.len() + 1;
let (fragment, filter_params) = filter.to_sql_fragment_for(start, dialect);
if !first {
sql.push_str(" AND ");
}
sql.push_str(&fragment);
params.extend(filter_params);
first = false;
}
}
macro_rules! impl_filter {
($ty:ty) => {
impl $ty {
pub fn filter(mut self, expr: toolu_orm_core::expr::Expr) -> Self {
self.filters.push(expr);
self
}
}
};
}
pub(crate) use impl_filter;
macro_rules! cfg_single_backend {
($($item:item)*) => {
$(
#[cfg(any(
all(feature = "libsql", not(feature = "rusqlite"), not(feature = "postgres")),
all(feature = "rusqlite", not(feature = "libsql"), not(feature = "postgres")),
all(feature = "postgres", not(feature = "libsql"), not(feature = "rusqlite")),
))]
$item
)*
};
}
pub(crate) use cfg_single_backend;