mod catalog;
pub(crate) mod generated;
mod integrity;
#[cfg(feature = "sql")]
mod sql;
mod write;
use crate::{metrics::MetricsSink, traits::CanisterKind};
use icydb_core as core;
pub use integrity::IntegrityCheckError;
#[cfg(feature = "sql")]
pub use integrity::SqlIntegrityError;
#[cfg(feature = "sql")]
pub use sql::{
SqlExecutionPerfAttribution, SqlPureCoveringPerfAttribution, SqlQueryPerfAttribution,
};
pub use write::{
OutputRow, StructuralMutation, StructuralPatch, TypedAdapterError, TypedBindingError,
TypedEntityAdapter, TypedEntityBinding, TypedRowAdapter, TypedRowError, TypedWrite,
TypedWriteAdapter, TypedWriteError, WriteCell,
};
#[doc(hidden)]
pub use write::{TypedFieldBindingRequest, TypedFieldType};
pub struct DbSession<C: CanisterKind> {
inner: core::db::DbSession<C>,
}
impl<C: CanisterKind> DbSession<C> {
#[must_use]
pub const fn new(session: core::db::DbSession<C>) -> Self {
Self { inner: session }
}
#[must_use]
pub const fn debug(mut self) -> Self {
self.inner = self.inner.debug();
self
}
#[must_use]
pub fn metrics_sink(mut self, sink: &'static dyn MetricsSink) -> Self {
self.inner = self.inner.metrics_sink(sink);
self
}
pub fn execute_trusted_dynamic_query(
&self,
request: &crate::db::DynamicQuery,
) -> Result<crate::db::RowProjectionOutput, crate::Error> {
self.inner
.execute_trusted_dynamic_query(request)
.map_err(Into::into)
}
pub fn execute_public_dynamic_query(
&self,
request: &crate::db::DynamicQuery,
) -> Result<crate::db::RowProjectionOutput, crate::Error> {
self.inner
.execute_public_dynamic_query(request)
.map_err(Into::into)
}
pub fn execute_public_dynamic_grouped_query(
&self,
request: &crate::db::DynamicQuery,
) -> Result<crate::db::GroupedQueryOutput, crate::Error> {
self.inner
.execute_public_dynamic_grouped_query(request)
.map_err(Into::into)
}
pub fn execute_trusted_dynamic_grouped_query(
&self,
request: &crate::db::DynamicQuery,
) -> Result<crate::db::GroupedQueryOutput, crate::Error> {
self.inner
.execute_trusted_dynamic_grouped_query(request)
.map_err(Into::into)
}
pub(crate) fn execute_public_typed_dynamic_query(
&self,
binding: &TypedEntityBinding,
request: &crate::db::DynamicQuery,
) -> Result<Option<crate::db::RowProjectionOutput>, crate::Error> {
self.inner
.execute_public_dynamic_query_for_typed_binding(binding.inner(), request)
.map_err(Into::into)
}
pub(crate) fn execute_public_typed_dynamic_grouped_query(
&self,
binding: &TypedEntityBinding,
request: &crate::db::DynamicQuery,
) -> Result<Option<crate::db::GroupedQueryOutput>, crate::Error> {
self.inner
.execute_public_dynamic_grouped_query_for_typed_binding(binding.inner(), request)
.map_err(Into::into)
}
pub(crate) fn execute_public_typed_exact_key_batch<K>(
&self,
binding: &TypedEntityBinding,
keys: &[K],
) -> Result<Option<core::db::ExactKeyBatchProjectionOutput>, crate::Error>
where
K: core::db::PrimaryKeyEncode,
{
self.inner
.execute_public_exact_key_batch_for_typed_binding(binding.inner(), keys)
.map_err(Into::into)
}
}