Expand description
ReadOnlyTransaction provides a snapshot transaction with guaranteed consistency across reads, but does not allow writes. Read-only transactions can be configured to read at timestamps in the past.
Read-only transactions do not take locks. Instead, they work by choosing a Cloud Spanner timestamp, then executing all reads at that timestamp. Since they do not acquire locks, they do not block concurrent read-write transactions.
Unlike locking read-write transactions, read-only transactions never abort. They can fail if the chosen read timestamp is garbage collected; however, the default garbage collection policy is generous enough that most applications do not need to worry about this in practice. See the documentation of TimestampBound for more details.
Fields
rts: Option<DateTime<Utc>>Implementations
sourceimpl ReadOnlyTransaction
impl ReadOnlyTransaction
pub async fn single(
session: ManagedSession,
tb: TimestampBound
) -> Result<ReadOnlyTransaction, Status>
sourcepub async fn begin(
session: ManagedSession,
tb: TimestampBound,
options: CallOptions
) -> Result<ReadOnlyTransaction, Status>
pub async fn begin(
session: ManagedSession,
tb: TimestampBound,
options: CallOptions
) -> Result<ReadOnlyTransaction, Status>
begin starts a snapshot read-only Transaction on Cloud Spanner.
Methods from Deref<Target = Transaction>
sourcepub async fn query(
&mut self,
statement: Statement
) -> Result<RowIterator<'_>, Status>
pub async fn query(
&mut self,
statement: Statement
) -> Result<RowIterator<'_>, Status>
query executes a query against the database. It returns a RowIterator for retrieving the resulting rows.
query returns only row data, without a query plan or execution statistics.
sourcepub async fn query_with_option(
&mut self,
statement: Statement,
options: QueryOptions
) -> Result<RowIterator<'_>, Status>
pub async fn query_with_option(
&mut self,
statement: Statement,
options: QueryOptions
) -> Result<RowIterator<'_>, Status>
query executes a query against the database. It returns a RowIterator for retrieving the resulting rows.
query returns only row data, without a query plan or execution statistics.
sourcepub async fn read(
&mut self,
table: &str,
columns: &[&str],
key_set: impl Into<KeySet>
) -> Result<RowIterator<'_>, Status>
pub async fn read(
&mut self,
table: &str,
columns: &[&str],
key_set: impl Into<KeySet>
) -> Result<RowIterator<'_>, Status>
read returns a RowIterator for reading multiple rows from the database.
use google_cloud_spanner::key::Key;
use google_cloud_spanner::client::Client;
use google_cloud_spanner::reader::AsyncIterator;
#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
const DATABASE: &str = "projects/local-project/instances/test-instance/databases/local-database";
let client = Client::new(DATABASE).await?;
let mut tx = client.single().await?;
let mut iter = tx.read("Guild", &["GuildID", "OwnerUserID"], vec![
Key::new(&"pk1"),
Key::new(&"pk2")
]).await?;
while let Some(row) = iter.next().await? {
let guild_id = row.column_by_name::<String>("GuildID");
//do something
};
Ok(())
}sourcepub async fn read_with_option(
&mut self,
table: &str,
columns: &[&str],
key_set: impl Into<KeySet>,
options: ReadOptions
) -> Result<RowIterator<'_>, Status>
pub async fn read_with_option(
&mut self,
table: &str,
columns: &[&str],
key_set: impl Into<KeySet>,
options: ReadOptions
) -> Result<RowIterator<'_>, Status>
read returns a RowIterator for reading multiple rows from the database.
sourcepub async fn read_row(
&mut self,
table: &str,
columns: &[&str],
key: Key
) -> Result<Option<Row>, Status>
pub async fn read_row(
&mut self,
table: &str,
columns: &[&str],
key: Key
) -> Result<Option<Row>, Status>
read returns a RowIterator for reading multiple rows from the database.
use google_cloud_spanner::key::Key;
use google_cloud_spanner::client::Client;
#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
const DATABASE: &str = "projects/local-project/instances/test-instance/databases/local-database";
let client = Client::new(DATABASE).await?;
let mut tx = client.single().await?;
let row = tx.read_row("Guild", &["GuildID", "OwnerUserID"], Key::new(&"guild1")).await?;
Ok(())
}sourcepub async fn read_row_with_option(
&mut self,
table: &str,
columns: &[&str],
key: Key,
options: ReadOptions
) -> Result<Option<Row>, Status>
pub async fn read_row_with_option(
&mut self,
table: &str,
columns: &[&str],
key: Key,
options: ReadOptions
) -> Result<Option<Row>, Status>
read returns a RowIterator for reading multiple rows from the database.
Trait Implementations
sourceimpl Deref for ReadOnlyTransaction
impl Deref for ReadOnlyTransaction
type Target = Transaction
type Target = Transaction
Auto Trait Implementations
impl !RefUnwindSafe for ReadOnlyTransaction
impl Send for ReadOnlyTransaction
impl Sync for ReadOnlyTransaction
impl Unpin for ReadOnlyTransaction
impl !UnwindSafe for ReadOnlyTransaction
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
sourcefn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request