Class: Google::Cloud::Spanner::Client
- Inherits:
-
Object
- Object
- Google::Cloud::Spanner::Client
- Defined in:
- lib/google/cloud/spanner/client.rb
Overview
Instance Method Summary collapse
-
#close ⇒ Object
Closes the client connection and releases resources.
-
#commit {|commit| ... } ⇒ Time
Creates and commits a transaction for writes that execute atomically at a single logical point in time across columns, rows, and tables in a database.
-
#database ⇒ Database
The Spanner database connected to.
-
#database_id ⇒ String
The unique identifier for the database.
-
#delete(table, keys = []) ⇒ Time
Deletes rows from a table.
-
#execute(sql, params: nil, types: nil, single_use: nil) ⇒ Google::Cloud::Spanner::Results
(also: #query)
Executes a SQL query.
-
#insert(table, *rows) ⇒ Time
Inserts new rows in a table.
-
#instance ⇒ Instance
The Spanner instance connected to.
-
#instance_id ⇒ String
The unique identifier for the instance.
-
#project ⇒ Project
The Spanner project connected to.
-
#project_id ⇒ String
The unique identifier for the project.
-
#range(beginning, ending, exclude_begin: false, exclude_end: false) ⇒ Google::Cloud::Spanner::Range
Creates a Spanner Range.
-
#read(table, columns, keys: nil, index: nil, limit: nil, single_use: nil) ⇒ Google::Cloud::Spanner::Results
Read rows from a database table, as a simple alternative to #execute.
-
#replace(table, *rows) ⇒ Time
Inserts or replaces rows in a table.
-
#snapshot(strong: nil, timestamp: nil, read_timestamp: nil, staleness: nil, exact_staleness: nil) {|snapshot| ... } ⇒ Object
Creates a snapshot read-only transaction for reads that execute atomically at a single logical point in time across columns, rows, and tables in a database.
-
#transaction(deadline: 120) {|transaction| ... } ⇒ Time
Creates a transaction for reads and writes that execute atomically at a single logical point in time across columns, rows, and tables in a database.
-
#update(table, *rows) ⇒ Time
Updates existing rows in a table.
-
#upsert(table, *rows) ⇒ Time
(also: #save)
Inserts or updates rows in a table.
Instance Method Details
#close ⇒ Object
Closes the client connection and releases resources.
912 913 914 |
# File 'lib/google/cloud/spanner/client.rb', line 912 def close @pool.close end |
#commit {|commit| ... } ⇒ Time
Creates and commits a transaction for 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 completes. Unlike #transaction, which can also perform reads, this operation accepts only mutations and makes a single API request.
Note: This method does not feature replay protection present in Transaction#commit (See #transaction). This method makes a single RPC, whereas Transaction#commit requires two RPCs (one of which may be performed in advance), and so this method may be appropriate for latency sensitive and/or high throughput blind changes.
658 659 660 661 662 663 664 |
# File 'lib/google/cloud/spanner/client.rb', line 658 def commit &block fail ArgumentError, "Must provide a block" unless block_given? @pool.with_session do |session| session.commit(&block) end end |
#database ⇒ Database
The Spanner database connected to.
95 96 97 |
# File 'lib/google/cloud/spanner/client.rb', line 95 def database @project.database instance_id, database_id end |
#database_id ⇒ String
The unique identifier for the database.
77 78 79 |
# File 'lib/google/cloud/spanner/client.rb', line 77 def database_id @database_id end |
#delete(table, keys = []) ⇒ Time
Deletes rows from a table. Succeeds whether or not the specified rows were present.
Changes are made immediately upon calling this method using a single-use transaction. To make multiple changes in the same single-use transaction use #commit. To make changes in a transaction that supports reads and automatic retry protection use #transaction.
Note: This method does not feature replay protection present in Transaction#delete (See #transaction). This method makes a single RPC, whereas Transaction#delete requires two RPCs (one of which may be performed in advance), and so this method may be appropriate for latency sensitive and/or high throughput blind deletions.
620 621 622 623 624 |
# File 'lib/google/cloud/spanner/client.rb', line 620 def delete table, keys = [] @pool.with_session do |session| session.delete table, keys end end |
#execute(sql, params: nil, types: nil, single_use: 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.
238 239 240 241 242 243 244 245 246 247 248 249 |
# File 'lib/google/cloud/spanner/client.rb', line 238 def execute sql, params: nil, types: nil, single_use: nil validate_single_use_args! single_use ensure_service! single_use_tx = single_use_transaction single_use results = nil @pool.with_session do |session| results = session.execute \ sql, params: params, types: types, transaction: single_use_tx end results end |
#insert(table, *rows) ⇒ Time
Inserts new rows in a table. If any of the rows already exist, the write or request fails with AlreadyExistsError.
Changes are made immediately upon calling this method using a single-use transaction. To make multiple changes in the same single-use transaction use #commit. To make changes in a transaction that supports reads and automatic retry protection use #transaction.
Note: This method does not feature replay protection present in Transaction#insert (See #transaction). This method makes a single RPC, whereas Transaction#insert requires two RPCs (one of which may be performed in advance), and so this method may be appropriate for latency sensitive and/or high throughput blind inserts.
470 471 472 473 474 |
# File 'lib/google/cloud/spanner/client.rb', line 470 def insert table, *rows @pool.with_session do |session| session.insert table, rows end end |
#instance ⇒ Instance
The Spanner instance connected to.
89 90 91 |
# File 'lib/google/cloud/spanner/client.rb', line 89 def instance @project.instance instance_id end |
#instance_id ⇒ String
The unique identifier for the instance.
71 72 73 |
# File 'lib/google/cloud/spanner/client.rb', line 71 def instance_id @instance_id end |
#project ⇒ Project
The Spanner project connected to.
83 84 85 |
# File 'lib/google/cloud/spanner/client.rb', line 83 def project @project end |
#project_id ⇒ String
The unique identifier for the project.
65 66 67 |
# File 'lib/google/cloud/spanner/client.rb', line 65 def project_id @project.service.project end |
#range(beginning, ending, exclude_begin: false, exclude_end: false) ⇒ Google::Cloud::Spanner::Range
Creates a Spanner Range. This can be used in place of a Ruby Range when needing to exclude the beginning value.
903 904 905 906 907 |
# File 'lib/google/cloud/spanner/client.rb', line 903 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, single_use: nil) ⇒ Google::Cloud::Spanner::Results
Read rows from a database table, as a simple alternative to #execute.
349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
# File 'lib/google/cloud/spanner/client.rb', line 349 def read table, columns, keys: nil, index: nil, limit: nil, single_use: nil validate_single_use_args! single_use ensure_service! single_use_tx = single_use_transaction single_use results = nil @pool.with_session do |session| results = session.read \ table, columns, keys: keys, index: index, limit: limit, transaction: single_use_tx end results end |
#replace(table, *rows) ⇒ Time
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
.
Changes are made immediately upon calling this method using a single-use transaction. To make multiple changes in the same single-use transaction use #commit. To make changes in a transaction that supports reads and automatic retry protection use #transaction.
Note: This method does not feature replay protection present in Transaction#replace (See #transaction). This method makes a single RPC, whereas Transaction#replace requires two RPCs (one of which may be performed in advance), and so this method may be appropriate for latency sensitive and/or high throughput blind replaces.
582 583 584 585 586 |
# File 'lib/google/cloud/spanner/client.rb', line 582 def replace table, *rows @pool.with_session do |session| session.replace table, rows end end |
#snapshot(strong: nil, timestamp: nil, read_timestamp: nil, staleness: nil, exact_staleness: nil) {|snapshot| ... } ⇒ Object
Creates a snapshot read-only transaction for reads that execute atomically at a single logical point in time across columns, rows, and tables in a database. For transactions that only read, snapshot read-only transactions provide simpler semantics and are almost always faster than read-write transactions.
808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 |
# File 'lib/google/cloud/spanner/client.rb', line 808 def snapshot strong: nil, timestamp: nil, read_timestamp: nil, staleness: nil, exact_staleness: nil validate_snapshot_args! strong: strong, timestamp: , read_timestamp: , staleness: staleness, exact_staleness: exact_staleness ensure_service! @pool.with_session do |session| snp_grpc = @project.service.create_snapshot \ session.path, strong: strong, timestamp: ( || ), staleness: (staleness || exact_staleness) snp = Snapshot.from_grpc(snp_grpc, session) yield snp if block_given? end nil end |
#transaction(deadline: 120) {|transaction| ... } ⇒ Time
Creates a transaction for reads and writes that execute atomically at a single logical point in time across columns, rows, and tables in a database.
The transaction will always commit unless an error is raised. If the error raised is Rollback the transaction method will return without passing on the error. All other errors will be passed on.
All changes are accumulated in memory until the block completes.
Transactions will be automatically retried when possible, until
deadline
is reached. This operation makes separate API requests to
begin and commit the transaction.
723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 |
# File 'lib/google/cloud/spanner/client.rb', line 723 def transaction deadline: 120, &block ensure_service! deadline = validate_deadline deadline backoff = 1.0 start_time = current_time @pool.with_transaction do |tx| begin block.call tx commit_resp = @project.service.commit \ tx.session.path, tx.mutations, transaction_id: tx.transaction_id return Convert. commit_resp. rescue Google::Cloud::AbortedError => err # Re-raise if deadline has passed raise err if current_time - start_time > deadline # Sleep the amount from RetryDelay, or incremental backoff sleep(delay_from_aborted(err) || backoff *= 1.3) # Create new transaction on the session and retry the block tx = tx.session.create_transaction retry rescue => err # Rollback transaction when handling unexpected error tx.session.rollback tx.transaction_id # Return nil if raised with rollback. return nil if err.is_a? Rollback # Re-raise error. raise err end end end |
#update(table, *rows) ⇒ Time
Updates existing rows in a table. If any of the rows does not already exist, the request fails with NotFoundError.
Changes are made immediately upon calling this method using a single-use transaction. To make multiple changes in the same single-use transaction use #commit. To make changes in a transaction that supports reads and automatic retry protection use #transaction.
Note: This method does not feature replay protection present in Transaction#update (See #transaction). This method makes a single RPC, whereas Transaction#update requires two RPCs (one of which may be performed in advance), and so this method may be appropriate for latency sensitive and/or high throughput blind updates.
525 526 527 528 529 |
# File 'lib/google/cloud/spanner/client.rb', line 525 def update table, *rows @pool.with_session do |session| session.update table, rows end end |
#upsert(table, *rows) ⇒ Time 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.
Changes are made immediately upon calling this method using a single-use transaction. To make multiple changes in the same single-use transaction use #commit. To make changes in a transaction that supports reads and automatic retry protection use #transaction.
Note: This method does not feature replay protection present in Transaction#upsert (See #transaction). This method makes a single RPC, whereas Transaction#upsert requires two RPCs (one of which may be performed in advance), and so this method may be appropriate for latency sensitive and/or high throughput blind upserts.
414 415 416 417 418 |
# File 'lib/google/cloud/spanner/client.rb', line 414 def upsert table, *rows @pool.with_session do |session| session.upsert table, rows end end |