Class: Google::Cloud::Spanner::Transaction
- Inherits:
-
Object
- Object
- Google::Cloud::Spanner::Transaction
- Defined in:
- lib/google/cloud/spanner/transaction.rb
Overview
Transaction
A transaction in Cloud Spanner is a set of reads and writes that execute atomically at a single logical point in time across columns, rows, and tables in a database.
All changes are accumulated in memory until the block passed to Client#transaction completes. Transactions will be automatically retried when possible. See Client#transaction.
Instance Attribute Summary collapse
Class Method Summary collapse
-
.from_grpc(grpc, session) ⇒ Object
Google::Spanner::V1::Transaction.
Instance Method Summary collapse
-
#delete(table, keys = []) ⇒ Object
Deletes rows from a table.
-
#execute(sql, params: nil, types: nil) ⇒ Google::Cloud::Spanner::Results
(also: #query)
Executes a SQL query.
-
#fields_for(table) ⇒ Hash, Array
Returns the field names and types for a table.
-
#idle_since?(duration) ⇒ Boolean
Determines if the transaction has been idle longer than the given duration.
-
#initialize ⇒ Transaction
constructor
A new instance of Transaction.
-
#insert(table, *rows) ⇒ Object
Inserts new rows in a table.
-
#keepalive! ⇒ Object
Keeps the transaction current by creating a new transaction.
-
#mutations ⇒ Object
All of the mutations created in the transaction block.
-
#range(beginning, ending, exclude_begin: false, exclude_end: false) ⇒ Google::Cloud::Spanner::Range
Creates a Cloud Spanner Range.
-
#read(table, columns, keys: nil, index: nil, limit: nil) ⇒ Google::Cloud::Spanner::Results
Read rows from a database table, as a simple alternative to #execute.
-
#release! ⇒ Object
Permanently deletes the transaction and session.
-
#replace(table, *rows) ⇒ Object
Inserts or replaces rows in a table.
-
#transaction_id ⇒ String
Identifier of the transaction results were run in.
-
#update(table, *rows) ⇒ Object
Updates existing rows in a table.
-
#upsert(table, *rows) ⇒ Object
(also: #save)
Inserts or updates rows in a table.
Constructor Details
#initialize ⇒ Transaction
Returns a new instance of Transaction.
80 81 82 |
# File 'lib/google/cloud/spanner/transaction.rb', line 80 def initialize @commit = Commit.new end |
Instance Attribute Details
#session ⇒ Object
78 79 80 |
# File 'lib/google/cloud/spanner/transaction.rb', line 78 def session @session end |
Class Method Details
.from_grpc(grpc, session) ⇒ Object
Google::Spanner::V1::Transaction.
540 541 542 543 544 545 |
# File 'lib/google/cloud/spanner/transaction.rb', line 540 def self.from_grpc grpc, session new.tap do |s| s.instance_variable_set :@grpc, grpc s.instance_variable_set :@session, session end end |
Instance Method Details
#delete(table, keys = []) ⇒ Object
Deletes rows from a table. Succeeds whether or not the specified rows were present.
All changes are accumulated in memory until the block passed to Client#transaction completes.
439 440 441 442 |
# File 'lib/google/cloud/spanner/transaction.rb', line 439 def delete table, keys = [] ensure_session! @commit.delete table, keys end |
#execute(sql, params: nil, types: nil) ⇒ Google::Cloud::Spanner::Results Also known as: query
Executes a SQL query.
Arguments can be passed using params, Ruby types are mapped to
Spanner types as follows:
| Spanner | Ruby | Notes |
|---|---|---|
BOOL |
true/false |
|
INT64 |
Integer |
|
FLOAT64 |
Float |
|
STRING |
String |
|
DATE |
Date |
|
TIMESTAMP |
Time, DateTime |
|
BYTES |
File, IO, StringIO, or similar |
|
ARRAY |
Array |
Nested arrays are not supported. |
See Data types.
180 181 182 183 184 185 186 187 |
# File 'lib/google/cloud/spanner/transaction.rb', line 180 def execute sql, params: nil, types: nil ensure_session! params, types = Convert.to_input_params_and_types params, types session.execute sql, params: params, types: types, transaction: tx_selector end |
#fields_for(table) ⇒ Hash, Array
Returns the field names and types for a table.
467 468 469 |
# File 'lib/google/cloud/spanner/transaction.rb', line 467 def fields_for table execute("SELECT * FROM #{table} WHERE 1 = 0").fields end |
#idle_since?(duration) ⇒ Boolean
Determines if the transaction has been idle longer than the given duration.
526 527 528 |
# File 'lib/google/cloud/spanner/transaction.rb', line 526 def idle_since? duration session.idle_since? duration end |
#insert(table, *rows) ⇒ Object
Inserts new rows in a table. If any of the rows already exist, the write or request fails with error AlreadyExistsError.
All changes are accumulated in memory until the block passed to Client#transaction completes.
321 322 323 324 |
# File 'lib/google/cloud/spanner/transaction.rb', line 321 def insert table, *rows ensure_session! @commit.insert table, rows end |
#keepalive! ⇒ Object
Keeps the transaction current by creating a new transaction.
509 510 511 512 |
# File 'lib/google/cloud/spanner/transaction.rb', line 509 def keepalive! ensure_session! @grpc = session.create_transaction.instance_variable_get :@grpc end |
#mutations ⇒ Object
All of the mutations created in the transaction block.
533 534 535 |
# File 'lib/google/cloud/spanner/transaction.rb', line 533 def mutations @commit.mutations end |
#range(beginning, ending, exclude_begin: false, exclude_end: false) ⇒ Google::Cloud::Spanner::Range
Creates a Cloud Spanner Range. This can be used in place of a Ruby Range when needing to exclude the beginning value.
500 501 502 503 504 |
# File 'lib/google/cloud/spanner/transaction.rb', line 500 def range beginning, ending, exclude_begin: false, exclude_end: false Range.new beginning, ending, exclude_begin: exclude_begin, exclude_end: exclude_end end |
#read(table, columns, keys: nil, index: nil, limit: nil) ⇒ Google::Cloud::Spanner::Results
Read rows from a database table, as a simple alternative to #execute.
224 225 226 227 228 229 230 231 232 |
# File 'lib/google/cloud/spanner/transaction.rb', line 224 def read table, columns, keys: nil, index: nil, limit: nil ensure_session! columns = Array(columns).map(&:to_s) keys = Convert.to_key_set keys session.read table, columns, keys: keys, index: index, limit: limit, transaction: tx_selector end |
#release! ⇒ Object
Permanently deletes the transaction and session.
517 518 519 520 |
# File 'lib/google/cloud/spanner/transaction.rb', line 517 def release! ensure_session! session.release! end |
#replace(table, *rows) ⇒ Object
Inserts or replaces rows in a table. If any of the rows already exist,
it is deleted, and the column values provided are inserted instead.
Unlike #upsert, this means any values not explicitly written become
NULL.
All changes are accumulated in memory until the block passed to Client#transaction completes.
413 414 415 416 |
# File 'lib/google/cloud/spanner/transaction.rb', line 413 def replace table, *rows ensure_session! @commit.replace table, rows end |
#transaction_id ⇒ String
Identifier of the transaction results were run in.
87 88 89 90 |
# File 'lib/google/cloud/spanner/transaction.rb', line 87 def transaction_id return nil if @grpc.nil? @grpc.id end |
#update(table, *rows) ⇒ Object
Updates existing rows in a table. If any of the rows does not already exist, the request fails with error NotFoundError.
All changes are accumulated in memory until the block passed to Client#transaction completes.
366 367 368 369 |
# File 'lib/google/cloud/spanner/transaction.rb', line 366 def update table, *rows ensure_session! @commit.update table, rows end |
#upsert(table, *rows) ⇒ Object Also known as: save
Inserts or updates rows in a table. If any of the rows already exist, then its column values are overwritten with the ones provided. Any column values not explicitly written are preserved.
All changes are accumulated in memory until the block passed to Client#transaction completes.
275 276 277 278 |
# File 'lib/google/cloud/spanner/transaction.rb', line 275 def upsert table, *rows ensure_session! @commit.upsert table, rows end |