pub struct SQLiteDocumentStore { /* private fields */ }Implementations§
Source§impl SQLiteDocumentStore
impl SQLiteDocumentStore
pub fn new(conn: ManagedConnection, table: impl Into<String>) -> Self
pub fn max_doc_id(&self) -> StorageBackendResult<DocId>
Trait Implementations§
Source§impl Clone for SQLiteDocumentStore
impl Clone for SQLiteDocumentStore
Source§fn clone(&self) -> SQLiteDocumentStore
fn clone(&self) -> SQLiteDocumentStore
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl DocumentStore for SQLiteDocumentStore
impl DocumentStore for SQLiteDocumentStore
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 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 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 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 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 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.fn max_doc_id(&self) -> StorageBackendResult<DocId>
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 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 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 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 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.
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 is_empty(&self) -> StorageBackendResult<bool>
Source§fn iter_all(
&self,
) -> StorageBackendResult<Box<dyn Iterator<Item = (DocId, Document)> + '_>>
fn iter_all( &self, ) -> StorageBackendResult<Box<dyn Iterator<Item = (DocId, Document)> + '_>>
Iterate over
(doc_id, document) pairs in id order. The default
implementation fetches each document individually; SQLite-backed
stores override with a single query.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.
Auto Trait Implementations§
impl !RefUnwindSafe for SQLiteDocumentStore
impl !UnwindSafe for SQLiteDocumentStore
impl Freeze for SQLiteDocumentStore
impl Send for SQLiteDocumentStore
impl Sync for SQLiteDocumentStore
impl Unpin for SQLiteDocumentStore
impl UnsafeUnpin for SQLiteDocumentStore
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