Struct mz_adapter::session::Session

source ·
pub struct Session<T = Timestamp>
where T: Debug + Clone + Send + Sync,
{
Show 17 fields conn_id: ConnectionId, uuid: Uuid, prepared_statements: BTreeMap<String, PreparedStatement>, portals: BTreeMap<String, Portal>, transaction: TransactionStatus<T>, pcx: Option<PlanContext>, metrics: SessionMetrics, role_metadata: Option<RoleMetadata>, client_ip: Option<IpAddr>, vars: SessionVars, notices_tx: UnboundedSender<AdapterNotice>, notices_rx: UnboundedReceiver<AdapterNotice>, next_transaction_id: TransactionId, secret_key: u32, external_metadata_rx: Option<Receiver<ExternalUserMetadata>>, qcell_owner: QCellOwner, session_oracles: BTreeMap<Timeline, InMemoryTimestampOracle<T, NowFn<T>>>,
}
Expand description

A session holds per-connection state.

Fields§

§conn_id: ConnectionId§uuid: Uuid

A globally unique identifier for the session. Not to be confused with conn_id, which may be reused.

§prepared_statements: BTreeMap<String, PreparedStatement>§portals: BTreeMap<String, Portal>§transaction: TransactionStatus<T>§pcx: Option<PlanContext>§metrics: SessionMetrics§role_metadata: Option<RoleMetadata>

The role metadata of the current session.

Invariant: role_metadata must be Some after the user has successfully connected to and authenticated with Materialize.

Prefer using this value over [Self.user.name].

§client_ip: Option<IpAddr>§vars: SessionVars§notices_tx: UnboundedSender<AdapterNotice>§notices_rx: UnboundedReceiver<AdapterNotice>§next_transaction_id: TransactionId§secret_key: u32§external_metadata_rx: Option<Receiver<ExternalUserMetadata>>§qcell_owner: QCellOwner§session_oracles: BTreeMap<Timeline, InMemoryTimestampOracle<T, NowFn<T>>>

Implementations§

source§

impl<T: TimestampManipulation> Session<T>

source

pub(crate) fn new( build_info: &'static BuildInfo, config: SessionConfig, metrics: SessionMetrics, ) -> Session<T>

Creates a new session for the specified connection ID.

source

pub fn meta(&self) -> SessionMeta

Returns a reference-less collection of data usable by other tasks that don’t have ownership of the Session.

source

pub(crate) fn mint_logging<A: AstInfo>( &self, raw_sql: String, stmt: Option<&Statement<A>>, now: EpochMillis, ) -> Arc<QCell<PreparedStatementLoggingInfo>>

Creates new statement logging metadata for a one-off statement.

source

pub(crate) fn qcell_rw<'a, T2: 'a>( &'a mut self, cell: &'a Arc<QCell<T2>>, ) -> &'a mut T2

source

pub fn uuid(&self) -> Uuid

Returns a unique ID for the session. Not to be confused with connection_id, which can be reused.

source

pub fn dummy() -> Session<T>

Creates a new dummy session.

Dummy sessions are intended for use when executing queries on behalf of the system itself, rather than on behalf of a user.

source

fn new_internal( build_info: &'static BuildInfo, _: SessionConfig, metrics: SessionMetrics, ) -> Session<T>

source

pub fn secret_key(&self) -> u32

Returns the secret key associated with the session.

source

fn new_pcx(&self, wall_time: DateTime<Utc>) -> PlanContext

source

pub fn start_transaction( &mut self, wall_time: DateTime<Utc>, access: Option<TransactionAccessMode>, isolation_level: Option<TransactionIsolationLevel>, ) -> Result<(), AdapterError>

Starts an explicit transaction, or changes an implicit to an explicit transaction.

source

pub fn start_transaction_implicit( &mut self, wall_time: DateTime<Utc>, stmts: usize, )

Starts either a single statement or implicit transaction based on the number of statements, but only if no transaction has been started already.

source

pub fn start_transaction_single_stmt(&mut self, wall_time: DateTime<Utc>)

Starts a single statement transaction, but only if no transaction has been started already.

source

pub fn clear_transaction(&mut self) -> TransactionStatus<T>

Clears a transaction, setting its state to Default and destroying all portals. Returned are:

  • sinks that were started in this transaction and need to be dropped
  • the cleared transaction so its operations can be handled

The Postgres protocol docs specify:

a named portal object lasts till the end of the current transaction and An unnamed portal is destroyed at the end of the transaction

source

pub fn fail_transaction(self) -> Self

Marks the current transaction as failed.

source

pub fn transaction(&self) -> &TransactionStatus<T>

Returns the current transaction status.

source

pub fn transaction_mut(&mut self) -> &mut TransactionStatus<T>

Returns the current transaction status.

source

pub fn transaction_code(&self) -> TransactionCode

Returns the session’s transaction code.

source

pub fn add_transaction_ops( &mut self, add_ops: TransactionOps<T>, ) -> Result<(), AdapterError>

Adds operations to the current transaction. An error is produced if they cannot be merged (i.e., a timestamp-dependent read cannot be merged to an insert).

source

pub fn retain_notice_transmitter(&self) -> UnboundedSender<AdapterNotice>

Returns a channel on which to send notices to the session.

source

pub fn add_notice(&self, notice: AdapterNotice)

Adds a notice to the session.

source

pub fn add_notices(&self, notices: impl IntoIterator<Item = AdapterNotice>)

Adds multiple notices to the session.

source

pub async fn recv_notice(&mut self) -> AdapterNotice

Awaits a possible notice.

This method is cancel safe.

source

pub fn drain_notices(&mut self) -> Vec<AdapterNotice>

Returns a draining iterator over the notices attached to the session.

source

fn notice_filter(&self, notice: AdapterNotice) -> Option<AdapterNotice>

Returns Some if the notice should be reported, otherwise None.

source

pub fn clear_transaction_ops(&mut self)

Sets the transaction ops to TransactionOps::None. Must only be used after verifying that no transaction anomalies will occur if cleared.

source

pub fn take_transaction_timestamp_context( &mut self, ) -> Option<TimestampContext<T>>

If the current transaction ops belong to a read, then sets the ops to None, returning the old read timestamp context if any existed. Must only be used after verifying that no transaction anomalies will occur if cleared.

source

pub fn get_transaction_timestamp_determination( &self, ) -> Option<TimestampDetermination<T>>

Returns the transaction’s read timestamp determination, if set.

Returns None if there is no active transaction, or if the active transaction is not a read transaction.

source

pub fn contains_read_timestamp(&self) -> bool

Whether this session has a timestamp for a read transaction.

source

pub fn set_prepared_statement( &mut self, name: String, stmt: Option<Statement<Raw>>, raw_sql: String, desc: StatementDesc, catalog_revision: u64, now: EpochMillis, )

Registers the prepared statement under name.

source

pub fn remove_prepared_statement(&mut self, name: &str) -> bool

Removes the prepared statement associated with name.

Returns whether a statement previously existed.

source

pub fn remove_all_prepared_statements(&mut self)

Removes all prepared statements.

source

pub fn get_prepared_statement_unverified( &self, name: &str, ) -> Option<&PreparedStatement>

Retrieves the prepared statement associated with name.

This is unverified and could be incorrect if the underlying catalog has changed.

source

pub fn get_prepared_statement_mut_unverified( &mut self, name: &str, ) -> Option<&mut PreparedStatement>

Retrieves the prepared statement associated with name.

This is unverified and could be incorrect if the underlying catalog has changed.

source

pub fn prepared_statements(&self) -> &BTreeMap<String, PreparedStatement>

Returns the prepared statements for the session.

source

pub fn set_portal( &mut self, portal_name: String, desc: StatementDesc, stmt: Option<Statement<Raw>>, logging: Arc<QCell<PreparedStatementLoggingInfo>>, params: Vec<(Datum<'_>, ScalarType)>, result_formats: Vec<Format>, catalog_revision: u64, ) -> Result<(), AdapterError>

Binds the specified portal to the specified prepared statement.

If the prepared statement contains parameters, the values and types of those parameters must be provided in params. It is the caller’s responsibility to ensure that the correct number of parameters is provided.

The results_formats parameter sets the desired format of the results, and is stored on the portal.

source

pub fn remove_portal(&mut self, portal_name: &str) -> bool

Removes the specified portal.

If there is no such portal, this method does nothing. Returns whether that portal existed.

source

pub fn get_portal_unverified(&self, portal_name: &str) -> Option<&Portal>

Retrieves a reference to the specified portal.

If there is no such portal, returns None.

source

pub fn get_portal_unverified_mut( &mut self, portal_name: &str, ) -> Option<&mut Portal>

Retrieves a mutable reference to the specified portal.

If there is no such portal, returns None.

source

pub fn create_new_portal( &mut self, stmt: Option<Statement<Raw>>, logging: Arc<QCell<PreparedStatementLoggingInfo>>, desc: StatementDesc, parameters: Params, result_formats: Vec<Format>, catalog_revision: u64, ) -> Result<String, AdapterError>

Creates and installs a new portal.

source

pub fn reset(&mut self)

Resets the session to its initial state. Returns sinks that need to be dropped.

source

pub fn application_name(&self) -> &str

Returns the application_name that created this session.

source

pub fn vars(&self) -> &SessionVars

Returns a reference to the variables in this session.

source

pub fn vars_mut(&mut self) -> &mut SessionVars

Returns a mutable reference to the variables in this session.

source

pub fn try_grant_write_locks( &mut self, guards: WriteLocks, ) -> Result<(), &WriteLocks>

Grants a set of write locks to this session’s inner Transaction.

§Panics

If the inner transaction is idle. See TransactionStatus::try_grant_write_locks.

source

pub fn apply_external_metadata_updates(&mut self)

Drains any external metadata updates and applies the changes from the latest update.

source

pub fn initialize_role_metadata(&mut self, role_id: RoleId)

Initializes the session’s role metadata.

source

pub fn ensure_timestamp_oracle( &mut self, timeline: Timeline, ) -> &mut InMemoryTimestampOracle<T, NowFn<T>>

Ensures that a timestamp oracle exists for timeline and returns a mutable reference to the timestamp oracle.

source

pub fn ensure_local_timestamp_oracle( &mut self, ) -> &mut InMemoryTimestampOracle<T, NowFn<T>>

Ensures that a timestamp oracle exists for reads and writes from/to a local input and returns a mutable reference to the timestamp oracle.

source

pub fn get_timestamp_oracle( &self, timeline: &Timeline, ) -> Option<&InMemoryTimestampOracle<T, NowFn<T>>>

Returns a reference to the timestamp oracle for timeline.

source

pub fn apply_write(&mut self, timestamp: T)

If the current session is using the Strong Session Serializable isolation level advance the session local timestamp oracle to write_ts.

source

pub fn metrics(&self) -> &SessionMetrics

Returns the SessionMetrics instance associated with this Session.

Trait Implementations§

source§

impl<T> Debug for Session<T>
where T: Debug + Clone + Send + Sync + Debug,

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T> SessionMetadata for Session<T>

source§

fn conn_id(&self) -> &ConnectionId

Returns the connection ID associated with the session.
source§

fn client_ip(&self) -> Option<&IpAddr>

Returns the client address associated with the session.
source§

fn pcx(&self) -> &PlanContext

Returns the current transaction’s PlanContext. Panics if there is not a current transaction.
source§

fn role_metadata(&self) -> &RoleMetadata

Returns the role metadata for this session.
source§

fn vars(&self) -> &SessionVars

Returns the session vars for this session.
source§

fn current_role_id(&self) -> &RoleId

Returns the session’s current role ID. Read more
source§

fn session_role_id(&self) -> &RoleId

Returns the session’s session role ID. Read more
source§

fn user(&self) -> &User

source§

fn database(&self) -> &str

source§

fn search_path(&self) -> &[Ident]

source§

fn is_superuser(&self) -> bool

source§

fn enable_session_rbac_checks(&self) -> bool

Auto Trait Implementations§

§

impl<T> Freeze for Session<T>
where T: Freeze,

§

impl<T = Timestamp> !RefUnwindSafe for Session<T>

§

impl<T> Send for Session<T>

§

impl<T> Sync for Session<T>

§

impl<T> Unpin for Session<T>
where T: Unpin,

§

impl<T = Timestamp> !UnwindSafe for Session<T>

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> AsAny for T
where T: Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

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, U> CastInto<U> for T
where U: CastFrom<T>,

source§

fn cast_into(self) -> U

Performs the cast.
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FutureExt for T

source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. 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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

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

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
source§

impl<T, U> OverrideFrom<Option<&T>> for U
where U: OverrideFrom<T>,

source§

fn override_from(self, layer: &Option<&T>) -> U

Override the configuration represented by Self with values from the given layer.
source§

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

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

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<P, R> ProtoType<R> for P
where R: RustType<P>,

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<'a, S, T> Semigroup<&'a S> for T
where T: Semigroup<S>,

source§

fn plus_equals(&mut self, rhs: &&'a S)

The method of std::ops::AddAssign, for types that do not implement AddAssign.
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

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

§

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>,

§

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