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(request_options: nil, 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, request_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, request_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.
-
#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, request_options: 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.
Instance Method Details
#batch_update(request_options: nil, call_options: nil) {|batch_update| ... } ⇒ Array<Integer>
Executes DML statements in a batch.
718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 |
# File 'lib/google/cloud/spanner/transaction.rb', line 718 def batch_update request_options: nil, call_options: nil, &block ensure_session! = safe_execute do |seqno| response = session.batch_update tx_selector, seqno, request_options: , call_options: , &block batch_update_results = BatchUpdateResults.new response update_wrapped_transaction! batch_update_results.transaction response.result_sets.each do |result_set| update_precommit_token! result_set.precommit_token if result_set.precommit_token end batch_update_results.row_counts end 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.
1239 1240 1241 |
# File 'lib/google/cloud/spanner/transaction.rb', line 1239 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.
1073 1074 1075 1076 |
# File 'lib/google/cloud/spanner/transaction.rb', line 1073 def delete table, keys = [] ensure_session! @commit.delete table, keys end |
#execute_query(sql, params: nil, types: nil, query_options: nil, request_options: nil, call_options: nil) ⇒ Google::Cloud::Spanner::Results Also known as: execute, query, execute_sql
Executes a SQL query.
426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 |
# File 'lib/google/cloud/spanner/transaction.rb', line 426 def execute_query sql, params: nil, types: nil, query_options: nil, request_options: nil, call_options: nil ensure_session! params, types = Convert.to_input_params_and_types params, types = route_to_leader = LARHeaders.execute_query true safe_execute do |seqno| results = session.execute_query sql, params: params, types: types, transaction: tx_selector, seqno: seqno, query_options: , request_options: , call_options: , route_to_leader: route_to_leader, precommit_token_notify: method(:update_precommit_token!) update_wrapped_transaction! results.transaction results end end |
#execute_update(sql, params: nil, types: nil, query_options: nil, request_options: nil, call_options: nil) ⇒ Integer
Executes a DML statement.
613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 |
# File 'lib/google/cloud/spanner/transaction.rb', line 613 def execute_update sql, params: nil, types: nil, query_options: nil, request_options: nil, call_options: nil results = execute_query sql, params: params, types: types, query_options: , request_options: , call_options: # Since this method is calling `execute_query`, the transaction is going to be updated, # and the `results` object is going to be set up with precommit token notification reference, # so we don't need to do anything special here. # 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.
1178 1179 1180 |
# File 'lib/google/cloud/spanner/transaction.rb', line 1178 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.
951 952 953 954 |
# File 'lib/google/cloud/spanner/transaction.rb', line 951 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.
1211 1212 1213 1214 1215 |
# File 'lib/google/cloud/spanner/transaction.rb', line 1211 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, request_options: nil, call_options: nil) ⇒ Google::Cloud::Spanner::Results
Read rows from a database table, as a simple alternative to #execute_query.
839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 |
# File 'lib/google/cloud/spanner/transaction.rb', line 839 def read table, columns, keys: nil, index: nil, limit: nil, request_options: nil, call_options: nil ensure_session! columns = Array(columns).map(&:to_s) keys = Convert.to_key_set keys = route_to_leader = LARHeaders.read true safe_execute do results = session.read table, columns, keys: keys, index: index, limit: limit, transaction: tx_selector, request_options: , call_options: , route_to_leader: route_to_leader, precommit_token_notify: method(:update_precommit_token!) update_wrapped_transaction! results.transaction results end 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.
1047 1048 1049 1050 |
# File 'lib/google/cloud/spanner/transaction.rb', line 1047 def replace table, *rows ensure_session! @commit.replace table, rows end |
#transaction_id ⇒ String
Identifier of the transaction results were run in.
178 179 180 181 182 |
# File 'lib/google/cloud/spanner/transaction.rb', line 178 def transaction_id return @grpc.id if existing_transaction? safe_begin_transaction! @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.
998 999 1000 1001 |
# File 'lib/google/cloud/spanner/transaction.rb', line 998 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.
903 904 905 906 |
# File 'lib/google/cloud/spanner/transaction.rb', line 903 def upsert table, *rows ensure_session! @commit.upsert table, rows end |