use parking_lot::RwLockReadGuard;
use uqa_sql::ast::ColumnDef;
use uqa_storage::document_store::DocumentStore;
pub fn bind_direct_table_read<T>(
session: &dyn crate::row_locks::binding::RelationLockSession,
resolve: impl FnMut() -> Result<
Option<crate::row_locks::binding::RelationBinding<T>>,
uqa_sql::SQLError,
>,
) -> Result<Option<crate::row_locks::binding::RelationBinding<T>>, uqa_sql::SQLError> {
crate::row_locks::binding::bind_relation(
session,
crate::row_locks::RelationLockMode::AccessShare,
false,
resolve,
|_| Ok(()),
)
}
pub trait TableRead: Send + Sync {
fn column_definitions(&self) -> Vec<ColumnDef>;
fn read_documents(&self) -> RwLockReadGuard<'_, Box<dyn DocumentStore>>;
}
pub trait QueryTableAccess: Sync {
fn serializable_read(
&self,
name: &str,
) -> Result<Option<crate::serializable::SerializableRelationRead>, uqa_sql::SQLError>;
fn table(&self, name: &str) -> Result<std::sync::Arc<dyn TableRead>, uqa_sql::SQLError>;
fn command_overlay_changes(
&self,
name: &str,
) -> Result<Option<super::document_changes::DocumentChanges>, uqa_sql::SQLError>;
fn table_doc_count(&self, name: &str) -> Result<u64, uqa_sql::SQLError>;
}