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
-
#batch_update(call_options: nil) {|batch_update| ... } ⇒ Array<Integer>
Executes DML statements in a batch.
-
#commit_timestamp ⇒ ColumnValue
Creates a column value object representing setting a field's value to the timestamp of the commit.
-
#delete(table, keys = []) ⇒ Object
Deletes rows from a table.
-
#execute_query(sql, params: nil, types: nil, query_options: nil, call_options: nil) ⇒ Google::Cloud::Spanner::Results
(also: #execute, #query, #execute_sql)
Executes a SQL query.
-
#execute_update(sql, params: nil, types: nil, query_options: nil, call_options: nil) ⇒ Integer
Executes a DML statement.
-
#fields(types) ⇒ Fields
Creates a configuration object (Fields) that may be provided to queries or used to create STRUCT objects.
-
#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, call_options: nil) ⇒ Google::Cloud::Spanner::Results
Read rows from a database table, as a simple alternative to #execute_query.
-
#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 83 |
# File 'lib/google/cloud/spanner/transaction.rb', line 80 def initialize @commit = Commit.new @seqno = 0 end |
Instance Method Details
#batch_update(call_options: nil) {|batch_update| ... } ⇒ Array<Integer>
Executes DML statements in a batch.
557 558 559 560 561 562 |
# File 'lib/google/cloud/spanner/transaction.rb', line 557 def batch_update call_options: nil, &block ensure_session! @seqno += 1 session.batch_update tx_selector, @seqno, call_options: , &block end |
#commit_timestamp ⇒ ColumnValue
Creates a column value object representing setting a field's value to the timestamp of the commit. (See Client#commit_timestamp)
This placeholder value can only be used for timestamp columns that have set the option "(allow_commit_timestamp=true)" in the schema.
992 993 994 |
# File 'lib/google/cloud/spanner/transaction.rb', line 992 def ColumnValue. end |
#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.
828 829 830 831 |
# File 'lib/google/cloud/spanner/transaction.rb', line 828 def delete table, keys = [] ensure_session! @commit.delete table, keys end |
#execute_query(sql, params: nil, types: nil, query_options: nil, call_options: nil) ⇒ Google::Cloud::Spanner::Results Also known as: execute, query, execute_sql
Executes a SQL query.
314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/google/cloud/spanner/transaction.rb', line 314 def execute_query sql, params: nil, types: nil, query_options: nil, call_options: nil ensure_session! @seqno += 1 params, types = Convert.to_input_params_and_types params, types session.execute_query sql, params: params, types: types, transaction: tx_selector, seqno: @seqno, query_options: , call_options: end |
#execute_update(sql, params: nil, types: nil, query_options: nil, call_options: nil) ⇒ Integer
Executes a DML statement.
470 471 472 473 474 475 476 477 478 479 480 481 482 483 |
# File 'lib/google/cloud/spanner/transaction.rb', line 470 def execute_update sql, params: nil, types: nil, query_options: nil, call_options: nil results = execute_query sql, params: params, types: types, query_options: , call_options: # Stream all PartialResultSet to get ResultSetStats results.rows.to_a # Raise an error if there is not a row count returned if results.row_count.nil? raise Google::Cloud::InvalidArgumentError, "DML statement is invalid." end results.row_count end |
#fields(types) ⇒ Fields
Creates a configuration object (Fields) that may be provided to queries or used to create STRUCT objects. (The STRUCT will be represented by the Data class.) See Client#execute and/or Fields#struct.
For more information, see Data Types - Constructing a STRUCT.
931 932 933 |
# File 'lib/google/cloud/spanner/transaction.rb', line 931 def fields types Fields.new types 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.
710 711 712 713 |
# File 'lib/google/cloud/spanner/transaction.rb', line 710 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.
964 965 966 967 968 |
# File 'lib/google/cloud/spanner/transaction.rb', line 964 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, call_options: nil) ⇒ Google::Cloud::Spanner::Results
Read rows from a database table, as a simple alternative to #execute_query.
611 612 613 614 615 616 617 618 619 620 621 |
# File 'lib/google/cloud/spanner/transaction.rb', line 611 def read table, columns, keys: nil, index: nil, limit: nil, call_options: 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, call_options: 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.
802 803 804 805 |
# File 'lib/google/cloud/spanner/transaction.rb', line 802 def replace table, *rows ensure_session! @commit.replace table, rows end |
#transaction_id ⇒ String
Identifier of the transaction results were run in.
88 89 90 91 |
# File 'lib/google/cloud/spanner/transaction.rb', line 88 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.
755 756 757 758 |
# File 'lib/google/cloud/spanner/transaction.rb', line 755 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.
664 665 666 667 |
# File 'lib/google/cloud/spanner/transaction.rb', line 664 def upsert table, *rows ensure_session! @commit.upsert table, rows end |