Skip to main content

StandardEngine

Struct StandardEngine 

Source
pub struct StandardEngine(/* private fields */);

Implementations§

Source§

impl StandardEngine

Source

pub fn begin_command(&self, identity: IdentityId) -> Result<CommandTransaction>

Source

pub fn begin_admin(&self, identity: IdentityId) -> Result<AdminTransaction>

Source

pub fn begin_query(&self, identity: IdentityId) -> Result<QueryTransaction>

Source

pub fn clock(&self) -> &Clock

Get the runtime clock for timestamp operations.

Source

pub fn rng(&self) -> &Rng

Source

pub fn admin_as( &self, identity: IdentityId, rql: &str, params: Params, ) -> ExecutionResult

Source

pub fn command_as( &self, identity: IdentityId, rql: &str, params: Params, ) -> ExecutionResult

Source

pub fn query_as( &self, identity: IdentityId, rql: &str, params: Params, ) -> ExecutionResult

Source

pub fn subscribe_as( &self, identity: IdentityId, rql: &str, params: Params, ) -> ExecutionResult

Source

pub fn procedure_as( &self, identity: IdentityId, name: &str, params: Params, ) -> ExecutionResult

Call a procedure by fully-qualified name.

Source

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 name
  • table - 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

Source

pub fn new( multi: MultiTransaction, single: SingleTransaction, event_bus: EventBus, interceptors: InterceptorFactory, catalog: Catalog, config: EngineConfig, ) -> Self

Source

pub fn create_interceptors(&self) -> Interceptors

Create a new set of interceptors from the factory.

Source

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).

Source

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.

Source

pub fn multi(&self) -> &MultiTransaction

Source

pub fn multi_owned(&self) -> MultiTransaction

Source

pub fn actor_system(&self) -> ActorSystem

Get the actor system

Source

pub fn single(&self) -> &SingleTransaction

Source

pub fn single_owned(&self) -> SingleTransaction

Source

pub fn emit<E: Event>(&self, event: E)

Source

pub fn materialized_catalog(&self) -> &MaterializedCatalog

Source

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.

Source

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.

Source

pub fn flow_operator_store(&self) -> &SystemFlowOperatorStore

Source

pub fn current_version(&self) -> Result<CommitVersion>

Get the current version from the transaction manager

Source

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.

Source

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.

Source

pub fn executor(&self) -> Executor

Source

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).

Source

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.

Source

pub fn actor<M: 'static>(&self) -> Option<ActorRef<M>>
where ActorRef<M>: Send + Sync,

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).

Source

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”.

Source

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.

Source

pub fn is_read_only(&self) -> bool

Whether this engine is in read-only (replica) mode.

Source

pub fn shutdown(&self)

Source

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()?;
Source

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:

  1. 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.)

  2. 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.

  3. 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.

  4. 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

Source§

impl CdcHost for StandardEngine

Source§

fn begin_command(&self) -> Result<CommandTransaction>

Begin a new command transaction.
Source§

fn begin_query(&self) -> Result<QueryTransaction>

Begin a new read-only query transaction.
Source§

fn current_version(&self) -> Result<CommitVersion>

Get the current committed version.
Source§

fn done_until(&self) -> CommitVersion

Get the version up to which all transactions are complete.
Source§

fn wait_for_mark_timeout( &self, version: CommitVersion, timeout: Duration, ) -> bool

Wait for the watermark to reach the specified version. Returns true if the version was reached, false if timeout.
Source§

fn materialized_catalog(&self) -> &MaterializedCatalog

Get the materialized catalog for fingerprint-based shape lookup.
Source§

impl Clone for StandardEngine

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Deref for StandardEngine

Source§

type Target = Inner

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl WithEventBus for StandardEngine

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> GetSetFdFlags for T

Source§

fn get_fd_flags(&self) -> Result<FdFlags, Error>
where T: AsFilelike,

Query the “status” flags for the self file descriptor.
Source§

fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>
where T: AsFilelike,

Create a new SetFdFlags value for use with set_fd_flags. Read more
Source§

fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>
where T: AsFilelike,

Set the “status” flags for the self file descriptor. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Pointer = u32

Source§

fn debug( pointer: <T as Pointee>::Pointer, f: &mut Formatter<'_>, ) -> Result<(), Error>

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more