pub struct SqliteRunStore { /* private fields */ }Expand description
SQLite-backed persistent RunStore.
Open with SqliteRunStore::open (file path) or
SqliteRunStore::open_in_memory (tests). Both return the store plus
an AsyncIsleDriver the caller must shutdown().await when done —
dropping the driver without a shutdown call leaves the SQLite thread
as-is until the process exits.
Implementations§
Source§impl SqliteRunStore
impl SqliteRunStore
Sourcepub async fn open(
path: impl AsRef<Path>,
) -> Result<(Self, AsyncIsleDriver), RunStoreError>
pub async fn open( path: impl AsRef<Path>, ) -> Result<(Self, AsyncIsleDriver), RunStoreError>
Open (or create) a SQLite database file and run the schema migrations.
Sourcepub async fn open_in_memory() -> Result<(Self, AsyncIsleDriver), RunStoreError>
pub async fn open_in_memory() -> Result<(Self, AsyncIsleDriver), RunStoreError>
Open an ephemeral in-memory database (tests, doctests).
Trait Implementations§
Source§impl RunStore for SqliteRunStore
impl RunStore for SqliteRunStore
Source§fn create<'life0, 'async_trait>(
&'life0 self,
record: RunRecord,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create<'life0, 'async_trait>(
&'life0 self,
record: RunRecord,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Create a new Run row. Returns
Duplicate if record.id is already
stored.Source§fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
) -> Pin<Box<dyn Future<Output = Result<RunRecord, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
) -> Pin<Box<dyn Future<Output = Result<RunRecord, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Fetch a Run by id.
Source§fn list_by_task<'life0, 'life1, 'async_trait>(
&'life0 self,
task_id: &'life1 TaskId,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunRecord>, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_by_task<'life0, 'life1, 'async_trait>(
&'life0 self,
task_id: &'life1 TaskId,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunRecord>, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List every Run kicked from
task_id, ascending by created_at
(oldest kick first).Source§fn append_step_entry<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
entry: StepEntry,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn append_step_entry<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
entry: StepEntry,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Append one step-trace entry to a Run’s
step_entries, bumping
updated_at to now.Source§fn append_degradation<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
entry: DegradationEntry,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn append_degradation<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
entry: DegradationEntry,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Append one worker-reported degradation to a Run’s
degradations
(GH #32), bumping updated_at to now. Independent of
Self::append_step_entry — degradations never flow through step
OUTPUT/fold.Source§fn update_status<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
status: RunStatus,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_status<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
status: RunStatus,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Update a Run’s status, bumping
updated_at to now.Source§fn try_transition<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
from: RunStatus,
to: RunStatus,
) -> Pin<Box<dyn Future<Output = Result<bool, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn try_transition<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
from: RunStatus,
to: RunStatus,
) -> Pin<Box<dyn Future<Output = Result<bool, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Atomically transition a Run’s status from
from to to, bumping
updated_at to now — the compare-and-set primitive the resume path
(POST /v1/runs/:id/resume) uses to guard against a double resume
racing the same Interrupted Run into Running twice. Read moreSource§fn set_result<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
result_ref: Value,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_result<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
result_ref: Value,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Set a Run’s terminal
result_ref, bumping updated_at to now.Source§fn set_input_json<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
input_json: String,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_input_json<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
input_json: String,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Replace the opaque launch snapshot after pre-dispatch binding has
enriched it (for example with immutable
bound_agents).Source§fn list_running<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunRecord>, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_running<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunRecord>, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List every Run currently
Running (issue #35 ST2 boot sweep +
ST4 occupancy check reuse this). No ordering guarantee.Source§fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 RunListFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunRecord>, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 RunListFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunRecord>, RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List Runs matching
filter, newest-first (created_at
descending) — the GET /v1/runs collection read.Source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 RunId,
) -> Pin<Box<dyn Future<Output = Result<(), RunStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete a Run row (the
DELETE /v1/runs/:id retention operation).
The caller is responsible for pruning the sibling trace stream
(crate::store::trace::RunTraceStore::delete_run) — the two
stores are deliberately uncoupled at the trait level.Auto Trait Implementations§
impl Freeze for SqliteRunStore
impl RefUnwindSafe for SqliteRunStore
impl Send for SqliteRunStore
impl Sync for SqliteRunStore
impl Unpin for SqliteRunStore
impl UnsafeUnpin for SqliteRunStore
impl UnwindSafe for SqliteRunStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more