pub struct SqlEntityStore { /* private fields */ }Expand description
An EntityStore backed by SQLite. Namespace is the caller’s responsibility.
UUID is globally unique — get/delete by ID alone. Query/count use the namespace parameter as passed. The store is just a pool + is_file_backed.
Implementations§
Source§impl SqlEntityStore
impl SqlEntityStore
Sourcepub fn new(pool: Arc<ConnectionPool>, is_file_backed: bool) -> Self
pub fn new(pool: Arc<ConnectionPool>, is_file_backed: bool) -> Self
Create a new store.
When KHIVE_WRITE_QUEUE=1 (PoolConfig::write_queue_enabled), every
write path on this store — the batch upsert_entities (its own
explicit flag check) AND every single-row write routed through the
shared with_writer helper (upsert_entity, delete_entity) —
routes through the pool-wide WriterTask
(ConnectionPool::writer_task_handle) instead of the legacy
pool-mutex path. The handle is a clone of the ONE writer task owned
by pool — constructing multiple stores (or multiple namespaces)
over the same pool never spawns more than one writer task; see
ConnectionPool::writer_task_handle’s doc comment for why that
matters. None (falling back to the legacy path for every write)
if the flag is off, or if the writer task failed to spawn (for
example, an in-memory pool, which has no standalone-connection
support) — the flag is a best-effort opt-in, not a hard requirement.
Trait Implementations§
Source§impl EntityStore for SqlEntityStore
impl EntityStore for SqlEntityStore
Source§fn upsert_entity<'life0, 'async_trait>(
&'life0 self,
entity: Entity,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn upsert_entity<'life0, 'async_trait>(
&'life0 self,
entity: Entity,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn upsert_entities<'life0, 'async_trait>(
&'life0 self,
entities: Vec<Entity>,
) -> Pin<Box<dyn Future<Output = Result<BatchWriteSummary, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn upsert_entities<'life0, 'async_trait>(
&'life0 self,
entities: Vec<Entity>,
) -> Pin<Box<dyn Future<Output = Result<BatchWriteSummary, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn get_entity<'life0, 'async_trait>(
&'life0 self,
id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Option<Entity>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_entity<'life0, 'async_trait>(
&'life0 self,
id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Option<Entity>, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
None if absent.