Skip to main content

MultiUseReadOnlyTransactionBuilder

Struct MultiUseReadOnlyTransactionBuilder 

Source
pub struct MultiUseReadOnlyTransactionBuilder { /* private fields */ }
Expand description

A builder for MultiUseReadOnlyTransaction.

§Example

let db_client = spanner.database_client("projects/p/instances/i/databases/d").build().await?;
let read_only_tx = db_client.read_only_transaction()
    .set_timestamp_bound(TimestampBound::strong())
    .build()
    .await?;

Implementations§

Source§

impl MultiUseReadOnlyTransactionBuilder

Source

pub fn with_begin_transaction_option( self, option: BeginTransactionOption, ) -> Self

Sets the option for how to start a transaction.

§Example
let db_client = spanner.database_client("projects/p/instances/i/databases/d").build().await?;
let transaction = db_client.read_only_transaction().with_begin_transaction_option(BeginTransactionOption::ExplicitBegin).build().await?;
let statement = Statement::builder("SELECT * FROM users").build();
let result_set = transaction.execute_query(statement).await?;

By default, the Spanner client will inline the BeginTransaction call with the first query in the transaction. This reduces the number of round-trips to Spanner that are needed for a transaction. Setting this option to ExplicitBegin can be beneficial for specific transaction shapes:

  1. When the transaction executes multiple parallel queries at the start of the transaction. Only one query can include a BeginTransaction option, and all other queries must wait for the first query to return the first result before they can proceed to execute. A BeginTransaction RPC will quickly return a transaction ID and allow all queries to start execution in parallel once the transaction ID has been returned.
  2. When the first query in the transaction could fail. If the query fails, then it will also not start a transaction and return a transaction ID. The transaction will then fall back to executing a BeginTransaction RPC and retry the first query.

Default is BeginTransactionOption::InlineBegin.

Source

pub fn with_begin_attempt_timeout(self, timeout: Duration) -> Self

Sets the per-attempt timeout for the BeginTransaction RPC.

§Example
let db_client = spanner.database_client("projects/p/instances/i/databases/d").build().await?;
let transaction = db_client.read_only_transaction()
    .with_begin_attempt_timeout(Duration::from_secs(10))
    .build()
    .await?;

Note: This timeout is only used if the transaction uses the ExplicitBegin transaction option.

Source

pub fn with_begin_retry_policy(self, policy: impl Into<RetryPolicyArg>) -> Self

Sets the retry policy for the BeginTransaction RPC.

§Example
let db_client = spanner.database_client("projects/p/instances/i/databases/d").build().await?;
let transaction = db_client.read_only_transaction()
    .with_begin_retry_policy(NeverRetry)
    .build()
    .await?;

Note: This policy is only used if the transaction uses the ExplicitBegin transaction option.

Source

pub fn with_begin_backoff_policy( self, policy: impl Into<BackoffPolicyArg>, ) -> Self

Sets the backoff policy for the BeginTransaction RPC.

§Example
let db_client = spanner.database_client("projects/p/instances/i/databases/d").build().await?;
let transaction = db_client.read_only_transaction()
    .with_begin_backoff_policy(ExponentialBackoff::default())
    .build()
    .await?;

Note: This policy is only used if the transaction uses the ExplicitBegin transaction option.

Source

pub fn set_timestamp_bound(self, bound: TimestampBound) -> Self

Sets the timestamp bound for the read-only transaction.

§Example
let db_client = spanner.database_client("projects/p/instances/i/databases/d").build().await?;
let builder = db_client.read_only_transaction().set_timestamp_bound(TimestampBound::strong());
Source

pub async fn build(self) -> Result<MultiUseReadOnlyTransaction>

Builds the MultiUseReadOnlyTransaction and starts the transaction by calling the BeginTransaction RPC.

§Example
let db_client = spanner.database_client("projects/p/instances/i/databases/d").build().await?;
let tx = db_client.read_only_transaction().build().await?;

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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<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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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