mod accepted_schema;
mod bounded_cache;
mod catalog;
mod integrity;
mod mutation_job;
mod query;
mod read_set;
mod request;
mod response;
mod resumable_job;
#[cfg(feature = "sql")]
mod sql;
mod write;
#[cfg(all(test, feature = "sql"))]
mod tests;
use crate::{
db::{Db, StoreRegistry},
traits::CanisterKind,
};
use std::thread::LocalKey;
pub(in crate::db) use accepted_schema::AcceptedSchemaCatalogContext;
pub(in crate::db) use bounded_cache::CacheEntryWeight;
#[cfg(feature = "sql")]
pub(in crate::db) use query::QueryPlanCacheReuse;
#[doc(hidden)]
pub use query::{
MAX_TYPED_EXACT_KEY_BATCH_INPUT_BYTES, MAX_TYPED_EXACT_KEY_BATCH_ITEMS,
MAX_TYPED_EXACT_KEY_BATCH_RESULT_BYTES, MAX_TYPED_EXACT_KEY_BATCH_STORED_BYTES,
};
pub use request::RequestExecutionRoot;
pub(in crate::db) use request::RequestExecutionScope;
pub(in crate::db) use response::finalize_structural_grouped_projection_result;
pub(in crate::db) use response::grouped_cursor_from_bytes;
#[cfg(feature = "sql")]
pub use sql::{
SqlConstraintValidationPage, SqlConstraintValidationRevisionStatus,
SqlConstraintValidationState, SqlDdlExecutionStatus, SqlDdlMutationKind,
SqlDdlPreparationReport, SqlIntegrityError, SqlStatementDispatch, SqlStatementResult,
SqlStatementShellSurface, SqlStatementSurface, sql_statement_dispatch,
sql_statement_shell_surface, sql_statement_surface,
};
#[cfg(feature = "sql")]
pub(in crate::db::session) use write::{
AcceptedStructuralMutation, AcceptedStructuralMutationTarget,
};
pub struct DbSession<C: CanisterKind> {
db: Db<C>,
}
impl<C: CanisterKind> DbSession<C> {
#[must_use]
pub fn new(
store: &'static LocalKey<StoreRegistry>,
request_root: &RequestExecutionRoot,
) -> Self {
Self {
db: Db::new(store, request_root.scope()),
}
}
pub(in crate::db) fn drive_startup_recovery_page_with_failure_authority(
&self,
) -> Result<bool, crate::db::commit::StartupRecoveryFailure> {
self.db.drive_startup_recovery_page_with_failure_authority()
}
#[doc(hidden)]
#[must_use]
pub fn __new_from_current_request(store: &'static LocalKey<StoreRegistry>) -> Option<Self> {
request::current_request_scope().map(|scope| Self {
db: Db::new(store, scope),
})
}
}