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 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.
-
#initialize ⇒ Transaction
constructor
A new instance of Transaction.
-
#insert(table, *rows) ⇒ Object
Inserts new rows in a table.
-
#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.
-
#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
52 53 54 |
# File 'lib/google/cloud/spanner/transaction.rb', line 52 def initialize @commit = Commit.new 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.
404 405 406 407 |
# File 'lib/google/cloud/spanner/transaction.rb', line 404 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.
152 153 154 155 156 |
# File 'lib/google/cloud/spanner/transaction.rb', line 152 def execute sql, params: nil, types: nil ensure_session! session.execute sql, params: params, types: types, transaction: tx_selector 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.
286 287 288 289 |
# File 'lib/google/cloud/spanner/transaction.rb', line 286 def insert table, *rows ensure_session! @commit.insert table, rows 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.
465 466 467 468 469 |
# File 'lib/google/cloud/spanner/transaction.rb', line 465 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.
193 194 195 196 197 |
# File 'lib/google/cloud/spanner/transaction.rb', line 193 def read table, columns, keys: nil, index: nil, limit: nil ensure_session! session.read table, columns, keys: keys, index: index, limit: limit, transaction: tx_selector 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.
378 379 380 381 |
# File 'lib/google/cloud/spanner/transaction.rb', line 378 def replace table, *rows ensure_session! @commit.replace table, rows end |
#transaction_id ⇒ String
Identifier of the transaction results were run in.
59 60 61 62 |
# File 'lib/google/cloud/spanner/transaction.rb', line 59 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.
331 332 333 334 |
# File 'lib/google/cloud/spanner/transaction.rb', line 331 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.
240 241 242 243 |
# File 'lib/google/cloud/spanner/transaction.rb', line 240 def upsert table, *rows ensure_session! @commit.upsert table, rows end |