Struct google_cloud_spanner::transaction::Transaction
source · pub struct Transaction { /* private fields */ }Implementations§
source§impl Transaction
impl 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.
Examples found in repository?
src/transaction.rs (line 152)
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
pub async fn read(
&mut self,
table: &str,
columns: &[&str],
key_set: impl Into<KeySet>,
) -> Result<RowIterator<'_>, Status> {
self.read_with_option(table, columns, key_set, ReadOptions::default())
.await
}
/// read returns a RowIterator for reading multiple rows from the database.
pub async fn read_with_option(
&mut self,
table: &str,
columns: &[&str],
key_set: impl Into<KeySet>,
options: ReadOptions,
) -> Result<RowIterator<'_>, Status> {
let request = ReadRequest {
session: self.get_session_name(),
transaction: Some(self.transaction_selector.clone()),
table: table.to_string(),
index: options.index,
columns: columns.iter().map(|x| x.to_string()).collect(),
key_set: Some(key_set.into().inner),
limit: options.limit,
resume_token: vec![],
partition_token: vec![],
request_options: Transaction::create_request_options(options.call_options.priority),
};
let session = self.as_mut_session();
let reader = Box::new(TableReader { request });
RowIterator::new(session, reader, Some(options.call_options)).await
}
/// 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(())
/// }
/// ```
pub async fn read_row(&mut self, table: &str, columns: &[&str], key: Key) -> Result<Option<Row>, Status> {
self.read_row_with_option(table, columns, key, ReadOptions::default())
.await
}
/// read returns a RowIterator for reading multiple rows from the database.
pub async fn read_row_with_option(
&mut self,
table: &str,
columns: &[&str],
key: Key,
options: ReadOptions,
) -> Result<Option<Row>, Status> {
let call_options = options.call_options.clone();
let mut reader = self
.read_with_option(table, columns, KeySet::from(key), options)
.await?;
reader.set_call_options(call_options);
reader.next().await
}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.
Auto Trait Implementations§
impl !RefUnwindSafe for Transaction
impl Send for Transaction
impl Sync for Transaction
impl Unpin for Transaction
impl !UnwindSafe for Transaction
Blanket Implementations§
source§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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request