pub struct StandardEngine(/* private fields */);Implementations§
Source§impl StandardEngine
impl StandardEngine
pub fn begin_command(&self, identity: IdentityId) -> Result<CommandTransaction>
pub fn begin_admin(&self, identity: IdentityId) -> Result<AdminTransaction>
pub fn begin_query(&self, identity: IdentityId) -> Result<QueryTransaction>
pub fn rng(&self) -> &Rng
pub fn admin_as( &self, identity: IdentityId, rql: &str, params: Params, ) -> ExecutionResult
pub fn command_as( &self, identity: IdentityId, rql: &str, params: Params, ) -> ExecutionResult
pub fn query_as( &self, identity: IdentityId, rql: &str, params: Params, ) -> ExecutionResult
pub fn subscribe_as( &self, identity: IdentityId, rql: &str, params: Params, ) -> ExecutionResult
Sourcepub fn procedure_as(
&self,
identity: IdentityId,
name: &str,
params: Params,
) -> ExecutionResult
pub fn procedure_as( &self, identity: IdentityId, name: &str, params: Params, ) -> ExecutionResult
Call a procedure by fully-qualified name.
Sourcepub fn register_virtual_table<T: UserVTable>(
&self,
namespace: &str,
name: &str,
table: T,
) -> Result<VTableId>
pub fn register_virtual_table<T: UserVTable>( &self, namespace: &str, name: &str, table: T, ) -> Result<VTableId>
Register a user-defined virtual table.
The virtual table will be available for queries using the given namespace and name.
§Arguments
namespace- The namespace name (e.g., “default”, “my_namespace”)name- The table nametable- The virtual table implementation
§Returns
The assigned VTableId on success.
§Example
use reifydb_engine::vtable::{UserVTable, UserVTableColumn};
use reifydb_type::value::r#type::Type;
use reifydb_core::value::Columns;
#[derive(Clone)]
struct MyTable;
impl UserVTable for MyTable {
fn definition(&self) -> Vec<UserVTableColumn> {
vec![UserVTableColumn::new("id", Type::Uint8)]
}
fn get(&self) -> Columns {
// Return column-oriented data
Columns::empty()
}
}
let id = engine.register_virtual_table("default", "my_table", MyTable)?;Source§impl StandardEngine
impl StandardEngine
pub fn new( multi: MultiTransaction, single: SingleTransaction, event_bus: EventBus, interceptors: InterceptorFactory, catalog: Catalog, config: EngineConfig, ) -> Self
Sourcepub fn create_interceptors(&self) -> Interceptors
pub fn create_interceptors(&self) -> Interceptors
Create a new set of interceptors from the factory.
Sourcepub fn add_interceptor_factory(
&self,
factory: Arc<dyn Fn(&mut Interceptors) + Send + Sync>,
)
pub fn add_interceptor_factory( &self, factory: Arc<dyn Fn(&mut Interceptors) + Send + Sync>, )
Register an additional interceptor factory function.
The function will be called on every create() to augment the base interceptors.
This is thread-safe and can be called after the engine is constructed (e.g. by subsystems).
Sourcepub fn begin_query_at_version(
&self,
version: CommitVersion,
identity: IdentityId,
) -> Result<QueryTransaction>
pub fn begin_query_at_version( &self, version: CommitVersion, identity: IdentityId, ) -> Result<QueryTransaction>
Begin a query transaction at a specific version.
This is used for parallel query execution where multiple tasks need to read from the same snapshot (same CommitVersion) for consistency.
pub fn multi(&self) -> &MultiTransaction
pub fn multi_owned(&self) -> MultiTransaction
Sourcepub fn actor_system(&self) -> ActorSystem
pub fn actor_system(&self) -> ActorSystem
Get the actor system
pub fn single(&self) -> &SingleTransaction
pub fn single_owned(&self) -> SingleTransaction
pub fn emit<E: Event>(&self, event: E)
pub fn materialized_catalog(&self) -> &MaterializedCatalog
Sourcepub fn catalog(&self) -> Catalog
pub fn catalog(&self) -> Catalog
Returns a Catalog instance for catalog lookups.
The Catalog provides three-tier lookup methods that check transactional changes,
then MaterializedCatalog, then fall back to storage.
Sourcepub fn services(&self) -> Arc<Services> ⓘ
pub fn services(&self) -> Arc<Services> ⓘ
Returns the shared Services instance used by this engine’s executor.
External consumers that want to drive volcano operators directly (e.g.
subsystems that build a QueryContext) read from the same Services
the engine already initialised - avoids duplicating the Services::new
wiring path.
pub fn flow_operator_store(&self) -> &SystemFlowOperatorStore
Sourcepub fn current_version(&self) -> Result<CommitVersion>
pub fn current_version(&self) -> Result<CommitVersion>
Get the current version from the transaction manager
Sourcepub fn done_until(&self) -> CommitVersion
pub fn done_until(&self) -> CommitVersion
Returns the highest version where ALL prior versions have completed. This is useful for CDC polling to know the safe upper bound for fetching CDC events - all events up to this version are guaranteed to be in storage.
Sourcepub fn wait_for_mark_timeout(
&self,
version: CommitVersion,
timeout: Duration,
) -> bool
pub fn wait_for_mark_timeout( &self, version: CommitVersion, timeout: Duration, ) -> bool
Wait for the watermark to reach the given version with a timeout. Returns true if the watermark reached the target, false if timeout occurred.
pub fn executor(&self) -> Executor
Sourcepub fn ioc(&self) -> &IocContainer
pub fn ioc(&self) -> &IocContainer
Borrow the IoC container backing this engine. Used by callers that need to resolve services registered during construction (e.g. observability providers).
Sourcepub fn cdc_store(&self) -> CdcStore
pub fn cdc_store(&self) -> CdcStore
Get the CDC store from the IoC container.
Returns the CdcStore that was registered during engine construction. Panics if CdcStore was not registered.
Sourcepub fn actor<M: 'static>(&self) -> Option<ActorRef<M>>
pub fn actor<M: 'static>(&self) -> Option<ActorRef<M>>
Resolve an actor handle by message type.
Returns None if no actor for M was registered during engine
construction (e.g. the CDC compact actor is only registered for
persistent backends).
Sourcepub fn cdc_producer_watermark(&self) -> CommitVersion
pub fn cdc_producer_watermark(&self) -> CommitVersion
Highest commit version processed by the CDC producer actor.
Once this returns >= V, every PostCommitEvent for versions <= V
has been fully handled by the producer, so any CDC row it was going
to write is in storage. Unlike cdc_store().max_version(), this
advances even for commits whose deltas were entirely filtered out by
should_exclude_from_cdc (e.g. ConfigStorage-only commits), so it is
the correct frontier for “producer is caught up to the engine”.
Sourcepub fn set_read_only(&self)
pub fn set_read_only(&self)
Mark this engine as read-only (replica mode). Once set, all write-path methods will return ENG_007 immediately.
Sourcepub fn is_read_only(&self) -> bool
pub fn is_read_only(&self) -> bool
Whether this engine is in read-only (replica) mode.
pub fn shutdown(&self)
Sourcepub fn bulk_insert<'e>(
&'e self,
identity: IdentityId,
) -> BulkInsertBuilder<'e, Validated>
pub fn bulk_insert<'e>( &'e self, identity: IdentityId, ) -> BulkInsertBuilder<'e, Validated>
Start a bulk insert operation with full validation.
This provides a fluent API for fast bulk inserts that bypasses RQL parsing. All inserts within a single builder execute in one transaction.
§Example
use reifydb_type::params;
engine.bulk_insert(&identity)
.table("namespace.users")
.row(params!{ id: 1, name: "Alice" })
.row(params!{ id: 2, name: "Bob" })
.done()
.execute()?;Sourcepub fn bulk_insert_unchecked<'e>(
&'e self,
identity: IdentityId,
) -> BulkInsertBuilder<'e, Unchecked>
pub fn bulk_insert_unchecked<'e>( &'e self, identity: IdentityId, ) -> BulkInsertBuilder<'e, Unchecked>
Start a bulk insert that bypasses BOTH constraint validation AND the oracle’s per-key conflict-detection index (“unchecked” mode).
§What this skips beyond bulk_insert
bulk_insert (the validated default) performs full type/constraint
validation and registers the commit’s write set in the oracle’s
conflict-detection time-windows so that any concurrent OCC transaction
whose read set overlaps these writes will be aborted at its own commit
time.
bulk_insert_unchecked skips both. The commit version still advances
and the watermark still progresses, so any transaction that reads at
version >= this commit will observe the new rows. But concurrent OCC
transactions that already started reading at an older version will
NOT detect that this commit happened underneath them.
§Safety contract - when this is sound
Use this method ONLY when ALL of the following hold for the calling context:
-
Single writer. This commit is the only writer touching the rows it inserts. No other thread / process / connection is writing to the same keys concurrently. (For chain ingest: the block-stream consumer is the only writer, and blocks arrive in monotonic order.)
-
No concurrent OCC reader needs to be invalidated. Any OCC transaction reading at an older version will silently miss this commit’s writes when computing its own conflict set. If your workload has concurrent user transactions that read these rows, they will commit successfully despite a logical conflict, and they will see stale data on retry. For trusted ingest where “downstream” readers are streaming-view operators that consume each new commit on its own merits (not via OCC retry), this is fine.
-
Caller-side well-formedness. Validation is skipped, so primary key violations or constraint failures will surface as storage errors at insert time rather than as transaction-level conflicts. The caller must already ensure the data conforms to the table/ringbuffer shape.
-
No need to abort on overlap. OCC normally aborts a writer whose read set was modified by a more recent committer. Skipping the index means a concurrent OCC writer with an overlapping read set will commit through. For trusted ingest where there is no competing OCC writer, this is irrelevant.
In short: safe for sequential, single-writer, append-mostly trusted ingest where downstream readers don’t rely on OCC abort-on-overlap. Unsafe (silently incorrect) for any workload with concurrent OCC transactions that read these keys and rely on conflict detection for correctness.
Trait Implementations§
Source§impl AuthEngine for StandardEngine
impl AuthEngine for StandardEngine
fn begin_admin(&self) -> Result<AdminTransaction>
fn begin_query(&self) -> Result<QueryTransaction>
fn catalog(&self) -> Catalog
Source§impl CdcHost for StandardEngine
impl CdcHost for StandardEngine
Source§fn begin_command(&self) -> Result<CommandTransaction>
fn begin_command(&self) -> Result<CommandTransaction>
Source§fn begin_query(&self) -> Result<QueryTransaction>
fn begin_query(&self) -> Result<QueryTransaction>
Source§fn current_version(&self) -> Result<CommitVersion>
fn current_version(&self) -> Result<CommitVersion>
Source§fn done_until(&self) -> CommitVersion
fn done_until(&self) -> CommitVersion
Source§fn wait_for_mark_timeout(
&self,
version: CommitVersion,
timeout: Duration,
) -> bool
fn wait_for_mark_timeout( &self, version: CommitVersion, timeout: Duration, ) -> bool
Source§fn materialized_catalog(&self) -> &MaterializedCatalog
fn materialized_catalog(&self) -> &MaterializedCatalog
Source§impl Clone for StandardEngine
impl Clone for StandardEngine
Source§impl Deref for StandardEngine
impl Deref for StandardEngine
Source§impl WithEventBus for StandardEngine
impl WithEventBus for StandardEngine
Auto Trait Implementations§
impl Freeze for StandardEngine
impl !RefUnwindSafe for StandardEngine
impl Send for StandardEngine
impl Sync for StandardEngine
impl Unpin for StandardEngine
impl UnsafeUnpin for StandardEngine
impl !UnwindSafe for StandardEngine
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> GetSetFdFlags for T
impl<T> GetSetFdFlags for T
Source§fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
self file descriptor.Source§fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
Source§fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
self file descriptor. Read moreSource§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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request