pub struct MemoryDocumentStore { /* private fields */ }Implementations§
Trait Implementations§
Source§impl Clone for MemoryDocumentStore
Cloning retains independent row maps and layouts; snapshot APIs share them until a write.
impl Clone for MemoryDocumentStore
Cloning retains independent row maps and layouts; snapshot APIs share them until a write.
Source§impl Debug for MemoryDocumentStore
impl Debug for MemoryDocumentStore
Source§impl Default for MemoryDocumentStore
impl Default for MemoryDocumentStore
Source§fn default() -> MemoryDocumentStore
fn default() -> MemoryDocumentStore
Returns the “default value” for a type. Read more
Source§impl DocumentStore for MemoryDocumentStore
impl DocumentStore for MemoryDocumentStore
Source§fn put(&mut self, doc_id: DocId, document: Document) -> StorageBackendResult<()>
fn put(&mut self, doc_id: DocId, document: Document) -> StorageBackendResult<()>
Replace public fields while preserving metadata already owned by the stored tuple. Engine code that creates a new tuple version must call
DocumentStore::put_stored with the new metadata explicitly.fn get(&self, doc_id: DocId) -> StorageBackendResult<Option<Document>>
Source§fn put_stored(
&mut self,
doc_id: DocId,
document: StoredDocument,
) -> StorageBackendResult<()>
fn put_stored( &mut self, doc_id: DocId, document: StoredDocument, ) -> StorageBackendResult<()>
Persist one typed storage record. Every backend owns the physical representation of tuple metadata and must keep it outside the public field map.
Source§fn get_stored(
&self,
doc_id: DocId,
) -> StorageBackendResult<Option<StoredDocument>>
fn get_stored( &self, doc_id: DocId, ) -> StorageBackendResult<Option<StoredDocument>>
Read one typed storage record without projecting metadata into user fields.
Source§fn get_stored_many(
&self,
doc_ids: &[DocId],
) -> StorageBackendResult<BTreeMap<DocId, StoredDocument>>
fn get_stored_many( &self, doc_ids: &[DocId], ) -> StorageBackendResult<BTreeMap<DocId, StoredDocument>>
Bulk variant of
DocumentStore::get_stored.Source§fn get_metadata(
&self,
doc_id: DocId,
) -> StorageBackendResult<Option<DocumentMetadata>>
fn get_metadata( &self, doc_id: DocId, ) -> StorageBackendResult<Option<DocumentMetadata>>
Read one tuple’s storage metadata without exposing it as a field.
fn contains_doc_id(&self, doc_id: DocId) -> StorageBackendResult<bool>
Source§fn get_field(
&self,
doc_id: DocId,
field: &str,
) -> StorageBackendResult<Option<Value>>
fn get_field( &self, doc_id: DocId, field: &str, ) -> StorageBackendResult<Option<Value>>
Read a single field. Returns an owned
Value so persistent
backends (SQLite, …) can decode on demand without reaching
for a reference into a transient row.Source§fn get_fields_multi(
&self,
doc_ids: &[DocId],
fields: &[&str],
) -> StorageBackendResult<BTreeMap<DocId, Vec<Value>>>
fn get_fields_multi( &self, doc_ids: &[DocId], fields: &[&str], ) -> StorageBackendResult<BTreeMap<DocId, Vec<Value>>>
Fetch several top-level fields for many documents. The result
vector is aligned with
fields; missing fields come back as
Value::Null, ids without a document are absent. Persistent
backends override this to extract all fields in one scan
instead of materialising whole documents.Source§fn for_each_fields_multi(
&self,
doc_ids: &[DocId],
fields: &[&str],
visitor: &mut dyn FnMut(DocId, Vec<Value>) -> bool,
) -> StorageBackendResult<()>
fn for_each_fields_multi( &self, doc_ids: &[DocId], fields: &[&str], visitor: &mut dyn FnMut(DocId, Vec<Value>) -> bool, ) -> StorageBackendResult<()>
Visit a column projection in the caller’s document-id order.
The callback receives one owned row at a time, allowing scan and
aggregate pipelines to avoid materialising a second doc-id map.
Returning
false stops the visit early. Missing documents yield
a row of NULLs, matching row-evaluator semantics.Source§fn for_each_fields_multi_ref(
&self,
doc_ids: &[DocId],
fields: &[&str],
visitor: &mut dyn FnMut(DocId, &[&Value]) -> bool,
) -> StorageBackendResult<()>
fn for_each_fields_multi_ref( &self, doc_ids: &[DocId], fields: &[&str], visitor: &mut dyn FnMut(DocId, &[&Value]) -> bool, ) -> StorageBackendResult<()>
Visit a column projection by reference when the backend can keep
decoded values alive for the duration of the callback. The default
adapter preserves the backend’s owned/batched projection path;
in-memory stores override it to avoid cloning every projected value.
Source§fn for_each_fields_multi_ref_with_presence(
&self,
doc_ids: &[DocId],
fields: &[&str],
visitor: &mut dyn FnMut(DocId, bool, &[&Value]) -> bool,
) -> StorageBackendResult<()>
fn for_each_fields_multi_ref_with_presence( &self, doc_ids: &[DocId], fields: &[&str], visitor: &mut dyn FnMut(DocId, bool, &[&Value]) -> bool, ) -> StorageBackendResult<()>
Visit a projection together with whether each requested document
actually exists. This avoids a separate
contains_doc_id probe when a
caller must distinguish a missing document from an existing document
whose requested fields are all NULL.Return rows aligned with
doc_ids as shared positional projections
when the backend owns stable decoded value vectors. None means the
backend does not support zero-copy projection; entries inside the
returned vector are None only for missing document ids.Source§fn find_doc_id_by_field(
&self,
field: &str,
value: &Value,
) -> StorageBackendResult<Option<DocId>>
fn find_doc_id_by_field( &self, field: &str, value: &Value, ) -> StorageBackendResult<Option<DocId>>
Find the first document whose top-level field equals
value.
Persistent stores can override this with an indexed or JSON-path
lookup so point updates do not have to materialise every row.Source§fn find_doc_id_by_fields(
&self,
fields: &[String],
values: &[Value],
) -> StorageBackendResult<Option<DocId>>
fn find_doc_id_by_fields( &self, fields: &[String], values: &[Value], ) -> StorageBackendResult<Option<DocId>>
Find the first document whose top-level fields match every
requested value.
Source§fn patch_fields(
&mut self,
doc_id: DocId,
updates: &BTreeMap<String, Value>,
) -> StorageBackendResult<bool>
fn patch_fields( &mut self, doc_id: DocId, updates: &BTreeMap<String, Value>, ) -> StorageBackendResult<bool>
Apply top-level field updates without requiring callers to
materialise the whole document.
Value::Null matches put by
removing the stored field. Ok(false) means the document does
not exist; write failures surface as Err.fn delete(&mut self, doc_id: DocId) -> StorageBackendResult<()>
fn clear(&mut self) -> StorageBackendResult<()>
fn doc_ids(&self) -> StorageBackendResult<Vec<DocId>>
Source§fn next_doc_id(
&self,
after: Option<DocId>,
) -> StorageBackendResult<Option<DocId>>
fn next_doc_id( &self, after: Option<DocId>, ) -> StorageBackendResult<Option<DocId>>
Return the first stored document id strictly greater than
after, or
the first id when after is None. Scan operators use this cursor API
so a full table scan does not need a cardinality-sized id vector before
it can yield its first row.Source§fn next_doc_ids(
&self,
after: Option<DocId>,
limit: usize,
) -> StorageBackendResult<Vec<DocId>>
fn next_doc_ids( &self, after: Option<DocId>, limit: usize, ) -> StorageBackendResult<Vec<DocId>>
Return up to
limit document ids strictly greater than after, in
ascending order. Scan operators use this bounded cursor instead of
reacquiring their store lock and issuing one backend lookup per row.Return the next bounded id range and its shared positional projections
in one storage traversal when stable decoded rows are available.
None lets persistent backends use the ordinary id + projection path.Source§fn for_each_next_fields(
&self,
after: Option<DocId>,
limit: usize,
fields: &[&str],
visitor: &mut dyn FnMut(DocId, &[&Value]) -> bool,
) -> StorageBackendResult<Option<usize>>
fn for_each_next_fields( &self, after: Option<DocId>, limit: usize, fields: &[&str], visitor: &mut dyn FnMut(DocId, &[&Value]) -> bool, ) -> StorageBackendResult<Option<usize>>
Visit the next bounded id range through a reusable borrowed projection of each backend-owned row. Missing fields are exposed as SQL NULL.
Some(count) means the backend supports this borrowed cursor and reports how many rows it visited; None selects the ordinary cursor path without invoking visitor.fn len(&self) -> StorageBackendResult<usize>
Source§fn snapshot(&self) -> StorageBackendResult<Arc<dyn DocumentStore>>
fn snapshot(&self) -> StorageBackendResult<Arc<dyn DocumentStore>>
Read-only handle suitable for an
ExecutionContext. Persistent
backends share their connection; memory backends deep-clone so the
snapshot is isolated from later mutations.Source§fn writable_snapshot(&self) -> StorageBackendResult<Box<dyn DocumentStore>>
fn writable_snapshot(&self) -> StorageBackendResult<Box<dyn DocumentStore>>
Independent writable copy used by the in-memory engine transaction
rollback path. Persistent engines restore through their backend
transaction and need not implement this operation.
Source§fn get_many(
&self,
doc_ids: &[DocId],
) -> StorageBackendResult<BTreeMap<DocId, Document>>
fn get_many( &self, doc_ids: &[DocId], ) -> StorageBackendResult<BTreeMap<DocId, Document>>
Bulk variant of
DocumentStore::get. Ids without a stored
document are absent from the result. The default implementation
walks each id one at a time; persistent backends should
override to batch the reads into few queries.Source§fn get_fields_bulk(
&self,
doc_ids: &[DocId],
field: &str,
) -> StorageBackendResult<BTreeMap<DocId, Value>>
fn get_fields_bulk( &self, doc_ids: &[DocId], field: &str, ) -> StorageBackendResult<BTreeMap<DocId, Value>>
Bulk variant of
DocumentStore::get_field. The default
implementation walks each id one at a time; persistent backends
should override to run a single batched query.Source§fn has_value(&self, field: &str, value: &Value) -> StorageBackendResult<bool>
fn has_value(&self, field: &str, value: &Value) -> StorageBackendResult<bool>
Return
true if any document has field == value.Source§fn eval_path(
&self,
doc_id: DocId,
path: &[PathSegment],
) -> StorageBackendResult<Option<Value>>
fn eval_path( &self, doc_id: DocId, path: &[PathSegment], ) -> StorageBackendResult<Option<Value>>
Evaluate a hierarchical path expression against a document.
fn max_doc_id(&self) -> StorageBackendResult<DocId>
fn is_empty(&self) -> StorageBackendResult<bool>
Auto Trait Implementations§
impl Freeze for MemoryDocumentStore
impl RefUnwindSafe for MemoryDocumentStore
impl Send for MemoryDocumentStore
impl Sync for MemoryDocumentStore
impl Unpin for MemoryDocumentStore
impl UnsafeUnpin for MemoryDocumentStore
impl UnwindSafe for MemoryDocumentStore
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