pub struct Uni { /* private fields */ }Expand description
Main entry point for Uni embedded database.
Uni is the lifecycle and admin handle. All data access goes through
Session (reads) and Transaction (writes).
§Examples
use uni_db::Uni;
#[tokio::main]
async fn main() -> Result<(), uni_db::UniError> {
let db = Uni::open("./my_db").build().await?;
// All data access goes through sessions
let session = db.session();
let results = session.query("MATCH (n) RETURN count(n)").await?;
println!("Count: {:?}", results);
Ok(())
}Implementations§
Source§impl Uni
impl Uni
pub fn schema(&self) -> SchemaBuilder<'_>
pub async fn load_schema(&self, path: impl AsRef<Path>) -> Result<()>
pub async fn save_schema(&self, path: impl AsRef<Path>) -> Result<()>
Source§impl Uni
impl Uni
Sourcepub fn xervo(&self) -> UniXervo
pub fn xervo(&self) -> UniXervo
Access Uni-Xervo runtime facade configured for this database.
Always succeeds — returns a facade even when no Xervo catalog is
configured. Individual methods (embed, generate, etc.) will return
an error in that case. Use UniXervo::is_available() to check upfront.
Source§impl Uni
impl Uni
Sourcepub fn open(uri: impl Into<String>) -> UniBuilder
pub fn open(uri: impl Into<String>) -> UniBuilder
Open or create a database at the given path.
If the database does not exist, it will be created.
§Arguments
uri- Local path or object store URI.
§Returns
A UniBuilder to configure and build the database instance.
Sourcepub fn open_existing(uri: impl Into<String>) -> UniBuilder
pub fn open_existing(uri: impl Into<String>) -> UniBuilder
Open an existing database at the given path. Fails if it does not exist.
Sourcepub fn create(uri: impl Into<String>) -> UniBuilder
pub fn create(uri: impl Into<String>) -> UniBuilder
Create a new database at the given path. Fails if it already exists.
Sourcepub fn temporary() -> UniBuilder
pub fn temporary() -> UniBuilder
Create a temporary database that is deleted when dropped.
Useful for tests and short-lived processing. Note: Currently uses a temporary directory on the filesystem.
Sourcepub fn in_memory() -> UniBuilder
pub fn in_memory() -> UniBuilder
Open an in-memory database (alias for temporary).
Sourcepub fn session(&self) -> Session
pub fn session(&self) -> Session
Create a new Session for data access.
Sessions are cheap, synchronous, and infallible. All reads go through sessions, and sessions are the factory for transactions (writes).
§Examples
let session = db.session();
let rows = session.query("MATCH (n) RETURN n LIMIT 10").await?;Sourcepub fn session_template(&self) -> SessionTemplateBuilder
pub fn session_template(&self) -> SessionTemplateBuilder
Create a session template builder for pre-configured session factories.
Templates pre-compile Locy rules, bind parameters, and attach hooks once, then cheaply stamp out sessions per-request.
Sourcepub fn metrics(&self) -> DatabaseMetrics
pub fn metrics(&self) -> DatabaseMetrics
Snapshot the database-level metrics.
This is a cheap, synchronous read of cached atomic values.
L0 metrics (l0_mutation_count, l0_estimated_size_bytes, wal_lsn)
reflect the state as of the last successful commit.
Sourcepub fn write_lease(&self) -> Option<&WriteLease>
pub fn write_lease(&self) -> Option<&WriteLease>
Returns the write lease configuration, if any. Write lease enforcement is Phase 2.
Sourcepub fn rules(&self) -> RuleRegistry<'_>
pub fn rules(&self) -> RuleRegistry<'_>
Access the global rule registry for managing pre-compiled Locy rules.
Rules registered here are cloned into every new Session.
Sourcepub async fn flush(&self) -> Result<()>
pub async fn flush(&self) -> Result<()>
Flush all uncommitted changes to persistent storage (L1).
This forces a write of the current in-memory buffer (L0) to columnar files. It also creates a new snapshot.
Sourcepub async fn create_snapshot(&self, name: &str) -> Result<String>
pub async fn create_snapshot(&self, name: &str) -> Result<String>
Create a named point-in-time snapshot of the database.
Flushes current changes, records the state, and persists the snapshot under the given name so it can be retrieved later. Returns the snapshot ID.
Sourcepub async fn list_snapshots(&self) -> Result<Vec<SnapshotManifest>>
pub async fn list_snapshots(&self) -> Result<Vec<SnapshotManifest>>
List all available snapshots.
Sourcepub async fn restore_snapshot(&self, snapshot_id: &str) -> Result<()>
pub async fn restore_snapshot(&self, snapshot_id: &str) -> Result<()>
Restore the database to a specific snapshot.
Note: This currently requires a restart or re-opening of Uni to fully take effect as it only updates the latest pointer.
Sourcepub async fn label_exists(&self, name: &str) -> Result<bool>
pub async fn label_exists(&self, name: &str) -> Result<bool>
Check if a label exists in the schema.
Sourcepub async fn edge_type_exists(&self, name: &str) -> Result<bool>
pub async fn edge_type_exists(&self, name: &str) -> Result<bool>
Check if an edge type exists in the schema.
Sourcepub async fn list_labels(&self) -> Result<Vec<String>>
pub async fn list_labels(&self) -> Result<Vec<String>>
Get all label names.
Returns the union of schema-registered labels (Active state) and labels
discovered from data (for schemaless mode where labels may not be in the
schema). This is consistent with list_edge_types() for schema labels
while also supporting schemaless workflows.
Sourcepub async fn list_edge_types(&self) -> Result<Vec<String>>
pub async fn list_edge_types(&self) -> Result<Vec<String>>
Get all edge type names.
Sourcepub async fn get_label_info(&self, name: &str) -> Result<Option<LabelInfo>>
pub async fn get_label_info(&self, name: &str) -> Result<Option<LabelInfo>>
Get detailed information about a label.
Sourcepub async fn get_edge_type_info(
&self,
name: &str,
) -> Result<Option<EdgeTypeInfo>>
pub async fn get_edge_type_info( &self, name: &str, ) -> Result<Option<EdgeTypeInfo>>
Get detailed information about an edge type.
Sourcepub fn compaction(&self) -> Compaction<'_>
pub fn compaction(&self) -> Compaction<'_>
Access compaction operations.
Sourcepub async fn shutdown(self) -> Result<()>
pub async fn shutdown(self) -> Result<()>
Shutdown the database gracefully, flushing pending data and stopping background tasks.
This method flushes any pending data and waits for all background tasks to complete (with a timeout). After calling this method, the database instance should not be used.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Uni
impl !RefUnwindSafe for Uni
impl Send for Uni
impl Sync for Uni
impl Unpin for Uni
impl UnsafeUnpin for Uni
impl !UnwindSafe for Uni
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.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>
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>
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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.