use crate::sqlx;
pub(super) fn bind_decimal(
query: &mut sqlx::QueryBuilder<'_, sqlx::Postgres>,
value: &dyn cratestack_sql::DecimalLike,
) {
#[cfg(feature = "decimal-rust-decimal")]
if let Some(value) = value.as_any().downcast_ref::<rust_decimal::Decimal>() {
query.push_bind(*value);
return;
}
#[cfg(feature = "decimal-bigdecimal")]
if let Some(value) = value.as_any().downcast_ref::<bigdecimal::BigDecimal>() {
query.push_bind(value.clone());
return;
}
#[cfg(not(any(feature = "decimal-rust-decimal", feature = "decimal-bigdecimal")))]
let _ = (&query, value);
unreachable!(
"SqlValue::Decimal held a concrete type not enabled by any decimal-* \
Cargo feature on cratestack-sqlx — an upstream invariant violation, \
since cratestack-macros can only ever construct one via a decimal \
backend it was told about"
);
}
#[cfg(feature = "decimal-rust-decimal")]
pub(super) fn bind_null_decimal(query: &mut sqlx::QueryBuilder<'_, sqlx::Postgres>) {
query.push_bind(Option::<rust_decimal::Decimal>::None);
}
#[cfg(all(feature = "decimal-bigdecimal", not(feature = "decimal-rust-decimal")))]
pub(super) fn bind_null_decimal(query: &mut sqlx::QueryBuilder<'_, sqlx::Postgres>) {
query.push_bind(Option::<bigdecimal::BigDecimal>::None);
}
#[cfg(not(any(feature = "decimal-rust-decimal", feature = "decimal-bigdecimal")))]
pub(super) fn bind_null_decimal(query: &mut sqlx::QueryBuilder<'_, sqlx::Postgres>) {
let _ = query;
unreachable!(
"SqlValue::NullDecimal requires a decimal backend Cargo feature \
(decimal-rust-decimal or decimal-bigdecimal) on cratestack-sqlx"
);
}