google-cloud-spanner 2.6.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/OVERVIEW.md +1 -1
- data/lib/google-cloud-spanner.rb +2 -0
- data/lib/google/cloud/spanner/batch_snapshot.rb +9 -2
- data/lib/google/cloud/spanner/client.rb +272 -34
- data/lib/google/cloud/spanner/commit.rb +4 -0
- data/lib/google/cloud/spanner/database.rb +7 -0
- data/lib/google/cloud/spanner/fields.rb +2 -1
- data/lib/google/cloud/spanner/project.rb +4 -0
- data/lib/google/cloud/spanner/results.rb +7 -3
- data/lib/google/cloud/spanner/service.rb +12 -8
- data/lib/google/cloud/spanner/session.rb +33 -10
- data/lib/google/cloud/spanner/snapshot.rb +10 -2
- data/lib/google/cloud/spanner/transaction.rb +61 -6
- data/lib/google/cloud/spanner/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65d994b98b82ef3397a11c418a6b46f54d76eca91c79dd02c024ad4761dcf0c0
|
4
|
+
data.tar.gz: 805fb5c52d24d20902c609b83d9afd7aafa1ff6bd4bc8a35485bc04db2441322
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f624455464b4ec987fde529f018f6b1e88b5a9ad5e769cd7bcb034980af1ebae5cde7c7567e92f9e5bc35226e0ade6be852e63d601b1d83420d75c0c35c3f1ba
|
7
|
+
data.tar.gz: 8baa9252146c458bb5f48aa7043c97584a4295d7afee72e21691e9a4be623d9fc8d9c62cc6f0a8b9c3b8ad0d4b34209a0ee48d88e98b9bd695153ea7024a5a8d
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 2.7.0 / 2021-06-09
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* add the support of optimizer statistics package ([#7591](https://www.github.com/googleapis/google-cloud-ruby/issues/7591))
|
8
|
+
* feat(spanner): add the support of optimizer statistics package
|
9
|
+
* Fix rubocop issues.
|
10
|
+
* Fix the env issue.
|
11
|
+
* database create time access method ([#11617](https://www.github.com/googleapis/google-cloud-ruby/issues/11617))
|
12
|
+
* added database create time method
|
13
|
+
* remove assert for databse create time
|
14
|
+
* RPC priority request option. ([#11258](https://www.github.com/googleapis/google-cloud-ruby/issues/11258))
|
15
|
+
|
16
|
+
#### Bug Fixes
|
17
|
+
|
18
|
+
* extract binary retry info from error ([#11656](https://www.github.com/googleapis/google-cloud-ruby/issues/11656))
|
19
|
+
* fix: extract binary retry info from error
|
20
|
+
* fix: remove unrelated frozen_string_literal change
|
21
|
+
* fix: remove unnecessary parentheses
|
22
|
+
|
3
23
|
### 2.6.0 / 2021-03-31
|
4
24
|
|
5
25
|
#### Features
|
data/OVERVIEW.md
CHANGED
data/lib/google-cloud-spanner.rb
CHANGED
@@ -156,7 +156,9 @@ Google::Cloud.configure.add_config! :spanner do |config|
|
|
156
156
|
default_query_options = Google::Cloud::Config.deferred do
|
157
157
|
query_options = {}
|
158
158
|
optimizer_version = ENV["SPANNER_OPTIMIZER_VERSION"]
|
159
|
+
optimizer_stats_pkg = ENV["SPANNER_OPTIMIZER_STATISTICS_PACKAGE"]
|
159
160
|
query_options[:optimizer_version] = optimizer_version if optimizer_version
|
161
|
+
query_options[:optimizer_statistics_package] = optimizer_stats_pkg if optimizer_stats_pkg
|
160
162
|
query_options = nil if query_options.empty?
|
161
163
|
query_options
|
162
164
|
end
|
@@ -173,6 +173,8 @@ module Google
|
|
173
173
|
# * `:optimizer_version` (String) The version of optimizer to use.
|
174
174
|
# Empty to use database default. "latest" to use the latest
|
175
175
|
# available optimizer version.
|
176
|
+
# * `:optimizer_statistics_package` (String) Statistics package to
|
177
|
+
# use. Empty to use the database default.
|
176
178
|
# @param [Hash] call_options A hash of values to specify the custom
|
177
179
|
# call options, e.g., timeout, retries, etc. Call options are
|
178
180
|
# optional. The following settings can be provided:
|
@@ -473,6 +475,8 @@ module Google
|
|
473
475
|
# * `:optimizer_version` (String) The version of optimizer to use.
|
474
476
|
# Empty to use database default. "latest" to use the latest
|
475
477
|
# available optimizer version.
|
478
|
+
# * `:optimizer_statistics_package` (String) Statistics package to
|
479
|
+
# use. Empty to use the database default.
|
476
480
|
# @param [Hash] call_options A hash of values to specify the custom
|
477
481
|
# call options, e.g., timeout, retries, etc. Call options are
|
478
482
|
# optional. The following settings can be provided:
|
@@ -598,8 +602,11 @@ module Google
|
|
598
602
|
# batch_snapshot = batch_client.batch_snapshot
|
599
603
|
#
|
600
604
|
# results = batch_snapshot.execute_query \
|
601
|
-
#
|
602
|
-
#
|
605
|
+
# "SELECT * FROM users",
|
606
|
+
# query_options: {
|
607
|
+
# optimizer_version: "1",
|
608
|
+
# optimizer_statistics_package: "auto_20191128_14_47_22UTC"
|
609
|
+
# }
|
603
610
|
#
|
604
611
|
# results.rows.each do |row|
|
605
612
|
# puts "User #{row[:id]} is #{row[:name]}"
|
@@ -42,12 +42,10 @@ module Google
|
|
42
42
|
#
|
43
43
|
# db = spanner.client "my-instance", "my-database"
|
44
44
|
#
|
45
|
-
# db.
|
46
|
-
# results = tx.execute_query "SELECT * FROM users"
|
45
|
+
# results = db.execute_query "SELECT * FROM users"
|
47
46
|
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
# end
|
47
|
+
# results.rows.each do |row|
|
48
|
+
# puts "User #{row[:id]} is #{row[:name]}"
|
51
49
|
# end
|
52
50
|
#
|
53
51
|
class Client
|
@@ -129,6 +127,7 @@ module Google
|
|
129
127
|
# | `BOOL` | `true`/`false` | |
|
130
128
|
# | `INT64` | `Integer` | |
|
131
129
|
# | `FLOAT64` | `Float` | |
|
130
|
+
# | `NUMERIC` | `BigDecimal` | |
|
132
131
|
# | `STRING` | `String` | |
|
133
132
|
# | `DATE` | `Date` | |
|
134
133
|
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
@@ -154,6 +153,7 @@ module Google
|
|
154
153
|
# * `:BYTES`
|
155
154
|
# * `:DATE`
|
156
155
|
# * `:FLOAT64`
|
156
|
+
# * `:NUMERIC`
|
157
157
|
# * `:INT64`
|
158
158
|
# * `:STRING`
|
159
159
|
# * `:TIMESTAMP`
|
@@ -167,6 +167,9 @@ module Google
|
|
167
167
|
# @param [Hash] single_use Perform the read with a single-use snapshot
|
168
168
|
# (read-only transaction). (See
|
169
169
|
# [TransactionOptions](https://cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#transactionoptions).)
|
170
|
+
# If no value is specified for this parameter, Cloud Spanner will use
|
171
|
+
# a single use read-only transaction with strong timestamp bound as
|
172
|
+
# default.
|
170
173
|
# The snapshot can be created by providing exactly one of the
|
171
174
|
# following options in the hash:
|
172
175
|
#
|
@@ -223,6 +226,16 @@ module Google
|
|
223
226
|
# * `:optimizer_version` (String) The version of optimizer to use.
|
224
227
|
# Empty to use database default. "latest" to use the latest
|
225
228
|
# available optimizer version.
|
229
|
+
# * `:optimizer_statistics_package` (String) Statistics package to
|
230
|
+
# use. Empty to use the database default.
|
231
|
+
# @param [Hash] request_options Common request options.
|
232
|
+
#
|
233
|
+
# * `:priority` (Symbol) The relative priority for requests.
|
234
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
235
|
+
# and does not guarantee priority or order of execution.
|
236
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
237
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
238
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
226
239
|
# @param [Hash] call_options A hash of values to specify the custom
|
227
240
|
# call options, e.g., timeout, retries, etc. Call options are
|
228
241
|
# optional. The following settings can be provided:
|
@@ -343,7 +356,10 @@ module Google
|
|
343
356
|
# db = spanner.client "my-instance", "my-database"
|
344
357
|
#
|
345
358
|
# results = db.execute_query \
|
346
|
-
# "SELECT * FROM users", query_options: {
|
359
|
+
# "SELECT * FROM users", query_options: {
|
360
|
+
# optimizer_version: "1",
|
361
|
+
# optimizer_statistics_package: "auto_20191128_14_47_22UTC"
|
362
|
+
# }
|
347
363
|
#
|
348
364
|
# results.rows.each do |row|
|
349
365
|
# puts "User #{row[:id]} is #{row[:name]}"
|
@@ -372,8 +388,24 @@ module Google
|
|
372
388
|
# puts "User #{row[:id]} is #{row[:name]}"
|
373
389
|
# end
|
374
390
|
#
|
391
|
+
# @example Using request options.
|
392
|
+
# require "google/cloud/spanner"
|
393
|
+
#
|
394
|
+
# spanner = Google::Cloud::Spanner.new
|
395
|
+
#
|
396
|
+
# db = spanner.client "my-instance", "my-database"
|
397
|
+
#
|
398
|
+
# request_options = { priority: :PRIORITY_MEDIUM }
|
399
|
+
# results = db.execute_query "SELECT * FROM users",
|
400
|
+
# request_options: request_options
|
401
|
+
#
|
402
|
+
# results.rows.each do |row|
|
403
|
+
# puts "User #{row[:id]} is #{row[:name]}"
|
404
|
+
# end
|
405
|
+
#
|
375
406
|
def execute_query sql, params: nil, types: nil, single_use: nil,
|
376
|
-
query_options: nil,
|
407
|
+
query_options: nil, request_options: nil,
|
408
|
+
call_options: nil
|
377
409
|
validate_single_use_args! single_use
|
378
410
|
ensure_service!
|
379
411
|
|
@@ -384,7 +416,8 @@ module Google
|
|
384
416
|
@pool.with_session do |session|
|
385
417
|
results = session.execute_query \
|
386
418
|
sql, params: params, types: types, transaction: single_use_tx,
|
387
|
-
query_options: query_options,
|
419
|
+
query_options: query_options, request_options: request_options,
|
420
|
+
call_options: call_options
|
388
421
|
end
|
389
422
|
results
|
390
423
|
end
|
@@ -408,7 +441,7 @@ module Google
|
|
408
441
|
# once" semantics.
|
409
442
|
#
|
410
443
|
# Where DML statements must be executed using Transaction (see
|
411
|
-
# {Transaction#execute_update}),
|
444
|
+
# {Transaction#execute_update}), Partitioned DML statements are executed
|
412
445
|
# outside of a read/write transaction.
|
413
446
|
#
|
414
447
|
# Not all DML statements can be executed in the Partitioned DML mode and
|
@@ -494,6 +527,7 @@ module Google
|
|
494
527
|
# | `BOOL` | `true`/`false` | |
|
495
528
|
# | `INT64` | `Integer` | |
|
496
529
|
# | `FLOAT64` | `Float` | |
|
530
|
+
# | `NUMERIC` | `BigDecimal` | |
|
497
531
|
# | `STRING` | `String` | |
|
498
532
|
# | `DATE` | `Date` | |
|
499
533
|
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
@@ -520,6 +554,7 @@ module Google
|
|
520
554
|
# * `:BYTES`
|
521
555
|
# * `:DATE`
|
522
556
|
# * `:FLOAT64`
|
557
|
+
# * `:NUMERIC`
|
523
558
|
# * `:INT64`
|
524
559
|
# * `:STRING`
|
525
560
|
# * `:TIMESTAMP`
|
@@ -535,6 +570,16 @@ module Google
|
|
535
570
|
# * `:optimizer_version` (String) The version of optimizer to use.
|
536
571
|
# Empty to use database default. "latest" to use the latest
|
537
572
|
# available optimizer version.
|
573
|
+
# * `:optimizer_statistics_package` (String) Statistics package to
|
574
|
+
# use. Empty to use the database default.
|
575
|
+
# @param [Hash] request_options Common request options.
|
576
|
+
#
|
577
|
+
# * `:priority` (String) The relative priority for requests.
|
578
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
579
|
+
# and does not guarantee priority or order of execution.
|
580
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
581
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
582
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
538
583
|
# @param [Hash] call_options A hash of values to specify the custom
|
539
584
|
# call options, e.g., timeout, retries, etc. Call options are
|
540
585
|
# optional. The following settings can be provided:
|
@@ -577,7 +622,10 @@ module Google
|
|
577
622
|
#
|
578
623
|
# row_count = db.execute_partition_update \
|
579
624
|
# "UPDATE users SET friends = NULL WHERE active = false",
|
580
|
-
# query_options: {
|
625
|
+
# query_options: {
|
626
|
+
# optimizer_version: "1",
|
627
|
+
# optimizer_statistics_package: "auto_20191128_14_47_22UTC"
|
628
|
+
# }
|
581
629
|
#
|
582
630
|
# @example Query using custom timeout and retry policy:
|
583
631
|
# require "google/cloud/spanner"
|
@@ -598,8 +646,20 @@ module Google
|
|
598
646
|
# "UPDATE users SET friends = NULL WHERE active = false",
|
599
647
|
# call_options: call_options
|
600
648
|
#
|
649
|
+
# @example Using request options.
|
650
|
+
# require "google/cloud/spanner"
|
651
|
+
#
|
652
|
+
# spanner = Google::Cloud::Spanner.new
|
653
|
+
# db = spanner.client "my-instance", "my-database"
|
654
|
+
#
|
655
|
+
# request_options = { priority: :PRIORITY_MEDIUM }
|
656
|
+
# row_count = db.execute_partition_update \
|
657
|
+
# "UPDATE users SET friends = NULL WHERE active = @active",
|
658
|
+
# params: { active: false }, request_options: request_options
|
659
|
+
#
|
601
660
|
def execute_partition_update sql, params: nil, types: nil,
|
602
|
-
query_options: nil,
|
661
|
+
query_options: nil, request_options: nil,
|
662
|
+
call_options: nil
|
603
663
|
ensure_service!
|
604
664
|
|
605
665
|
params, types = Convert.to_input_params_and_types params, types
|
@@ -608,7 +668,8 @@ module Google
|
|
608
668
|
results = session.execute_query \
|
609
669
|
sql, params: params, types: types,
|
610
670
|
transaction: pdml_transaction(session),
|
611
|
-
query_options: query_options,
|
671
|
+
query_options: query_options, request_options: request_options,
|
672
|
+
call_options: call_options
|
612
673
|
end
|
613
674
|
# Stream all PartialResultSet to get ResultSetStats
|
614
675
|
results.rows.to_a
|
@@ -640,6 +701,9 @@ module Google
|
|
640
701
|
# @param [Hash] single_use Perform the read with a single-use snapshot
|
641
702
|
# (read-only transaction). (See
|
642
703
|
# [TransactionOptions](https://cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#transactionoptions).)
|
704
|
+
# If no value is specified for this parameter, Cloud Spanner will use
|
705
|
+
# a single use read-only transaction with strong timestamp bound as
|
706
|
+
# default.
|
643
707
|
# The snapshot can be created by providing exactly one of the
|
644
708
|
# following options in the hash:
|
645
709
|
#
|
@@ -689,6 +753,14 @@ module Google
|
|
689
753
|
# Useful for reading the freshest data available at a nearby
|
690
754
|
# replica, while bounding the possible staleness if the local
|
691
755
|
# replica has fallen behind.
|
756
|
+
# @param [Hash] request_options Common request options.
|
757
|
+
#
|
758
|
+
# * `:priority` (Symbol) The relative priority for requests.
|
759
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
760
|
+
# and does not guarantee priority or order of execution.
|
761
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
762
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
763
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
692
764
|
# @param [Hash] call_options A hash of values to specify the custom
|
693
765
|
# call options, e.g., timeout, retries, etc. Call options are
|
694
766
|
# optional. The following settings can be provided:
|
@@ -753,8 +825,23 @@ module Google
|
|
753
825
|
# puts "User #{row[:id]} is #{row[:name]}"
|
754
826
|
# end
|
755
827
|
#
|
828
|
+
# @example Using request options.
|
829
|
+
# require "google/cloud/spanner"
|
830
|
+
#
|
831
|
+
# spanner = Google::Cloud::Spanner.new
|
832
|
+
#
|
833
|
+
# db = spanner.client "my-instance", "my-database"
|
834
|
+
#
|
835
|
+
# request_options = { priority: :PRIORITY_MEDIUM }
|
836
|
+
# results = db.read "users", [:id, :name],
|
837
|
+
# request_options: request_options
|
838
|
+
#
|
839
|
+
# results.rows.each do |row|
|
840
|
+
# puts "User #{row[:id]} is #{row[:name]}"
|
841
|
+
# end
|
842
|
+
#
|
756
843
|
def read table, columns, keys: nil, index: nil, limit: nil,
|
757
|
-
single_use: nil, call_options: nil
|
844
|
+
single_use: nil, request_options: nil, call_options: nil
|
758
845
|
validate_single_use_args! single_use
|
759
846
|
ensure_service!
|
760
847
|
|
@@ -767,6 +854,7 @@ module Google
|
|
767
854
|
results = session.read \
|
768
855
|
table, columns, keys: keys, index: index, limit: limit,
|
769
856
|
transaction: single_use_tx,
|
857
|
+
request_options: request_options,
|
770
858
|
call_options: call_options
|
771
859
|
end
|
772
860
|
results
|
@@ -801,6 +889,7 @@ module Google
|
|
801
889
|
# | `BOOL` | `true`/`false` | |
|
802
890
|
# | `INT64` | `Integer` | |
|
803
891
|
# | `FLOAT64` | `Float` | |
|
892
|
+
# | `NUMERIC` | `BigDecimal` | |
|
804
893
|
# | `STRING` | `String` | |
|
805
894
|
# | `DATE` | `Date` | |
|
806
895
|
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
@@ -817,6 +906,14 @@ module Google
|
|
817
906
|
# * `:return_commit_stats` (Boolean) A boolean value. If `true`,
|
818
907
|
# then statistics related to the transaction will be included in
|
819
908
|
# {CommitResponse}. Default value is `false`
|
909
|
+
# @param [Hash] request_options Common request options.
|
910
|
+
#
|
911
|
+
# * `:priority` (String) The relative priority for requests.
|
912
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
913
|
+
# and does not guarantee priority or order of execution.
|
914
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
915
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
916
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
820
917
|
#
|
821
918
|
# @return [Time, CommitResponse] The timestamp at which the operation
|
822
919
|
# committed. If commit options are set it returns {CommitResponse}.
|
@@ -846,9 +943,21 @@ module Google
|
|
846
943
|
# puts commit_resp.timestamp
|
847
944
|
# puts commit_resp.stats.mutation_count
|
848
945
|
#
|
849
|
-
|
946
|
+
# @example Using request options.
|
947
|
+
# require "google/cloud/spanner"
|
948
|
+
#
|
949
|
+
# spanner = Google::Cloud::Spanner.new
|
950
|
+
#
|
951
|
+
# db = spanner.client "my-instance", "my-database"
|
952
|
+
#
|
953
|
+
# request_options = { priority: :PRIORITY_MEDIUM }
|
954
|
+
# db.upsert "users", [{ id: 1, name: "Charlie", active: false }],
|
955
|
+
# request_options: request_options
|
956
|
+
#
|
957
|
+
def upsert table, rows, commit_options: nil, request_options: nil
|
850
958
|
@pool.with_session do |session|
|
851
|
-
session.upsert table, rows, commit_options: commit_options
|
959
|
+
session.upsert table, rows, commit_options: commit_options,
|
960
|
+
request_options: request_options
|
852
961
|
end
|
853
962
|
end
|
854
963
|
alias save upsert
|
@@ -881,6 +990,7 @@ module Google
|
|
881
990
|
# | `BOOL` | `true`/`false` | |
|
882
991
|
# | `INT64` | `Integer` | |
|
883
992
|
# | `FLOAT64` | `Float` | |
|
993
|
+
# | `NUMERIC` | `BigDecimal` | |
|
884
994
|
# | `STRING` | `String` | |
|
885
995
|
# | `DATE` | `Date` | |
|
886
996
|
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
@@ -897,6 +1007,14 @@ module Google
|
|
897
1007
|
# * `:return_commit_stats` (Boolean) A boolean value. If `true`,
|
898
1008
|
# then statistics related to the transaction will be included in
|
899
1009
|
# {CommitResponse}. Default value is `false`
|
1010
|
+
# @param [Hash] request_options Common request options.
|
1011
|
+
#
|
1012
|
+
# * `:priority` (String) The relative priority for requests.
|
1013
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
1014
|
+
# and does not guarantee priority or order of execution.
|
1015
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
1016
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
1017
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
900
1018
|
#
|
901
1019
|
# @return [Time, CommitResponse] The timestamp at which the operation
|
902
1020
|
# committed. If commit options are set it returns {CommitResponse}.
|
@@ -926,9 +1044,21 @@ module Google
|
|
926
1044
|
# puts commit_resp.timestamp
|
927
1045
|
# puts commit_resp.stats.mutation_count
|
928
1046
|
#
|
929
|
-
|
1047
|
+
# @example Using request options.
|
1048
|
+
# require "google/cloud/spanner"
|
1049
|
+
#
|
1050
|
+
# spanner = Google::Cloud::Spanner.new
|
1051
|
+
#
|
1052
|
+
# db = spanner.client "my-instance", "my-database"
|
1053
|
+
#
|
1054
|
+
# request_options = { priority: :PRIORITY_MEDIUM }
|
1055
|
+
# db.insert "users", [{ id: 1, name: "Charlie", active: false }],
|
1056
|
+
# request_options: request_options
|
1057
|
+
#
|
1058
|
+
def insert table, rows, commit_options: nil, request_options: nil
|
930
1059
|
@pool.with_session do |session|
|
931
|
-
session.insert table, rows, commit_options: commit_options
|
1060
|
+
session.insert table, rows, commit_options: commit_options,
|
1061
|
+
request_options: request_options
|
932
1062
|
end
|
933
1063
|
end
|
934
1064
|
|
@@ -960,6 +1090,7 @@ module Google
|
|
960
1090
|
# | `BOOL` | `true`/`false` | |
|
961
1091
|
# | `INT64` | `Integer` | |
|
962
1092
|
# | `FLOAT64` | `Float` | |
|
1093
|
+
# | `NUMERIC` | `BigDecimal` | |
|
963
1094
|
# | `STRING` | `String` | |
|
964
1095
|
# | `DATE` | `Date` | |
|
965
1096
|
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
@@ -976,6 +1107,14 @@ module Google
|
|
976
1107
|
# * `:return_commit_stats` (Boolean) A boolean value. If `true`,
|
977
1108
|
# then statistics related to the transaction will be included in
|
978
1109
|
# {CommitResponse}. Default value is `false`
|
1110
|
+
# @param [Hash] request_options Common request options.
|
1111
|
+
#
|
1112
|
+
# * `:priority` (String) The relative priority for requests.
|
1113
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
1114
|
+
# and does not guarantee priority or order of execution.
|
1115
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
1116
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
1117
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
979
1118
|
#
|
980
1119
|
# @return [Time, CommitResponse] The timestamp at which the operation
|
981
1120
|
# committed. If commit options are set it returns {CommitResponse}.
|
@@ -1005,9 +1144,21 @@ module Google
|
|
1005
1144
|
# puts commit_resp.timestamp
|
1006
1145
|
# puts commit_resp.stats.mutation_count
|
1007
1146
|
#
|
1008
|
-
|
1147
|
+
# @example Using request options.
|
1148
|
+
# require "google/cloud/spanner"
|
1149
|
+
#
|
1150
|
+
# spanner = Google::Cloud::Spanner.new
|
1151
|
+
#
|
1152
|
+
# db = spanner.client "my-instance", "my-database"
|
1153
|
+
#
|
1154
|
+
# request_options = { priority: :PRIORITY_MEDIUM }
|
1155
|
+
# db.update "users", [{ id: 1, name: "Charlie", active: false }],
|
1156
|
+
# request_options: request_options
|
1157
|
+
#
|
1158
|
+
def update table, rows, commit_options: nil, request_options: nil
|
1009
1159
|
@pool.with_session do |session|
|
1010
|
-
session.update table, rows, commit_options: commit_options
|
1160
|
+
session.update table, rows, commit_options: commit_options,
|
1161
|
+
request_options: request_options
|
1011
1162
|
end
|
1012
1163
|
end
|
1013
1164
|
|
@@ -1041,6 +1192,7 @@ module Google
|
|
1041
1192
|
# | `BOOL` | `true`/`false` | |
|
1042
1193
|
# | `INT64` | `Integer` | |
|
1043
1194
|
# | `FLOAT64` | `Float` | |
|
1195
|
+
# | `NUMERIC` | `BigDecimal` | |
|
1044
1196
|
# | `STRING` | `String` | |
|
1045
1197
|
# | `DATE` | `Date` | |
|
1046
1198
|
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
@@ -1057,6 +1209,14 @@ module Google
|
|
1057
1209
|
# * `:return_commit_stats` (Boolean) A boolean value. If `true`,
|
1058
1210
|
# then statistics related to the transaction will be included in
|
1059
1211
|
# {CommitResponse}. Default value is `false`
|
1212
|
+
# @param [Hash] request_options Common request options.
|
1213
|
+
#
|
1214
|
+
# * `:priority` (String) The relative priority for requests.
|
1215
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
1216
|
+
# and does not guarantee priority or order of execution.
|
1217
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
1218
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
1219
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
1060
1220
|
#
|
1061
1221
|
# @return [Time, CommitResponse] The timestamp at which the operation
|
1062
1222
|
# committed. If commit options are set it returns {CommitResponse}.
|
@@ -1086,9 +1246,21 @@ module Google
|
|
1086
1246
|
# puts commit_resp.timestamp
|
1087
1247
|
# puts commit_resp.stats.mutation_count
|
1088
1248
|
#
|
1089
|
-
|
1249
|
+
# @example Using request options.
|
1250
|
+
# require "google/cloud/spanner"
|
1251
|
+
#
|
1252
|
+
# spanner = Google::Cloud::Spanner.new
|
1253
|
+
#
|
1254
|
+
# db = spanner.client "my-instance", "my-database"
|
1255
|
+
#
|
1256
|
+
# request_options = { priority: :PRIORITY_MEDIUM }
|
1257
|
+
# db.replace "users", [{ id: 1, name: "Charlie", active: false }],
|
1258
|
+
# request_options: request_options
|
1259
|
+
#
|
1260
|
+
def replace table, rows, commit_options: nil, request_options: nil
|
1090
1261
|
@pool.with_session do |session|
|
1091
|
-
session.replace table, rows, commit_options: commit_options
|
1262
|
+
session.replace table, rows, commit_options: commit_options,
|
1263
|
+
request_options: request_options
|
1092
1264
|
end
|
1093
1265
|
end
|
1094
1266
|
|
@@ -1119,7 +1291,14 @@ module Google
|
|
1119
1291
|
# * `:return_commit_stats` (Boolean) A boolean value. If `true`,
|
1120
1292
|
# then statistics related to the transaction will be included in
|
1121
1293
|
# {CommitResponse}. Default value is `false`
|
1122
|
-
#
|
1294
|
+
# @param [Hash] request_options Common request options.
|
1295
|
+
#
|
1296
|
+
# * `:priority` (String) The relative priority for requests.
|
1297
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
1298
|
+
# and does not guarantee priority or order of execution.
|
1299
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
1300
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
1301
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
1123
1302
|
# @param [Hash] call_options A hash of values to specify the custom
|
1124
1303
|
# call options, e.g., timeout, retries, etc. Call options are
|
1125
1304
|
# optional. The following settings can be provided:
|
@@ -1159,9 +1338,21 @@ module Google
|
|
1159
1338
|
# puts commit_resp.timestamp
|
1160
1339
|
# puts commit_resp.stats.mutation_count
|
1161
1340
|
#
|
1162
|
-
|
1341
|
+
# @example With request optinos
|
1342
|
+
# require "google/cloud/spanner"
|
1343
|
+
#
|
1344
|
+
# spanner = Google::Cloud::Spanner.new
|
1345
|
+
#
|
1346
|
+
# db = spanner.client "my-instance", "my-database"
|
1347
|
+
#
|
1348
|
+
# request_options = { priority: :PRIORITY_MEDIUM }
|
1349
|
+
# db.delete "users", [1, 2, 3], request_options: request_options
|
1350
|
+
#
|
1351
|
+
def delete table, keys = [], commit_options: nil, request_options: nil,
|
1352
|
+
call_options: nil
|
1163
1353
|
@pool.with_session do |session|
|
1164
1354
|
session.delete table, keys, commit_options: commit_options,
|
1355
|
+
request_options: request_options,
|
1165
1356
|
call_options: call_options
|
1166
1357
|
end
|
1167
1358
|
end
|
@@ -1188,7 +1379,14 @@ module Google
|
|
1188
1379
|
# * `:return_commit_stats` (Boolean) A boolean value. If `true`,
|
1189
1380
|
# then statistics related to the transaction will be included in
|
1190
1381
|
# {CommitResponse}. Default value is `false`
|
1191
|
-
#
|
1382
|
+
# @param [Hash] request_options Common request options.
|
1383
|
+
#
|
1384
|
+
# * `:priority` (String) The relative priority for requests.
|
1385
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
1386
|
+
# and does not guarantee priority or order of execution.
|
1387
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
1388
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
1389
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
1192
1390
|
# @param [Hash] call_options A hash of values to specify the custom
|
1193
1391
|
# call options, e.g., timeout, retries, etc. Call options are
|
1194
1392
|
# optional. The following settings can be provided:
|
@@ -1237,18 +1435,33 @@ module Google
|
|
1237
1435
|
# puts commit_resp.timestamp
|
1238
1436
|
# puts commit_resp.stats.mutation_count
|
1239
1437
|
#
|
1240
|
-
|
1438
|
+
# @example With request options
|
1439
|
+
# require "google/cloud/spanner"
|
1440
|
+
#
|
1441
|
+
# spanner = Google::Cloud::Spanner.new
|
1442
|
+
#
|
1443
|
+
# db = spanner.client "my-instance", "my-database"
|
1444
|
+
#
|
1445
|
+
# db.commit request_options: { priority: :PRIORITY_MEDIUM } do |c|
|
1446
|
+
# c.update "users", [{ id: 1, name: "Charlie", active: false }]
|
1447
|
+
# c.insert "users", [{ id: 2, name: "Harvey", active: true }]
|
1448
|
+
# end
|
1449
|
+
#
|
1450
|
+
def commit commit_options: nil, request_options: nil,
|
1451
|
+
call_options: nil, &block
|
1241
1452
|
raise ArgumentError, "Must provide a block" unless block_given?
|
1242
1453
|
|
1243
1454
|
@pool.with_session do |session|
|
1244
1455
|
session.commit(
|
1245
|
-
commit_options: commit_options,
|
1456
|
+
commit_options: commit_options, request_options: request_options,
|
1457
|
+
call_options: call_options, &block
|
1246
1458
|
)
|
1247
1459
|
end
|
1248
1460
|
end
|
1249
1461
|
|
1250
1462
|
# rubocop:disable Metrics/AbcSize
|
1251
1463
|
# rubocop:disable Metrics/MethodLength
|
1464
|
+
# rubocop:disable Metrics/BlockLength
|
1252
1465
|
|
1253
1466
|
##
|
1254
1467
|
# Creates a transaction for reads and writes that execute atomically at
|
@@ -1273,7 +1486,14 @@ module Google
|
|
1273
1486
|
# * `:return_commit_stats` (Boolean) A boolean value. If `true`,
|
1274
1487
|
# then statistics related to the transaction will be included in
|
1275
1488
|
# {CommitResponse}. Default value is `false`
|
1276
|
-
#
|
1489
|
+
# @param [Hash] request_options Common request options.
|
1490
|
+
#
|
1491
|
+
# * `:priority` (String) The relative priority for requests.
|
1492
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
1493
|
+
# and does not guarantee priority or order of execution.
|
1494
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
1495
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
1496
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
1277
1497
|
# @param [Hash] call_options A hash of values to specify the custom
|
1278
1498
|
# call options, e.g., timeout, retries, etc. Call options are
|
1279
1499
|
# optional. The following settings can be provided:
|
@@ -1350,7 +1570,23 @@ module Google
|
|
1350
1570
|
# puts commit_resp.timestamp
|
1351
1571
|
# puts commit_resp.stats.mutation_count
|
1352
1572
|
#
|
1353
|
-
|
1573
|
+
# @example Using request options.
|
1574
|
+
# require "google/cloud/spanner"
|
1575
|
+
#
|
1576
|
+
# spanner = Google::Cloud::Spanner.new
|
1577
|
+
# db = spanner.client "my-instance", "my-database"
|
1578
|
+
#
|
1579
|
+
# db.transaction request_options: { priority: :PRIORITY_MEDIUM } do |tx|
|
1580
|
+
# tx.update "users", [{ id: 1, name: "Charlie", active: false }]
|
1581
|
+
# tx.insert "users", [{ id: 2, name: "Harvey", active: true }]
|
1582
|
+
#
|
1583
|
+
# request_options = { priority: :PRIORITY_LOW }
|
1584
|
+
# results = tx.execute_query "SELECT * FROM users",
|
1585
|
+
# request_options: request_options
|
1586
|
+
# end
|
1587
|
+
#
|
1588
|
+
def transaction deadline: 120, commit_options: nil,
|
1589
|
+
request_options: nil, call_options: nil
|
1354
1590
|
ensure_service!
|
1355
1591
|
unless Thread.current[:transaction_id].nil?
|
1356
1592
|
raise "Nested transactions are not allowed"
|
@@ -1367,6 +1603,7 @@ module Google
|
|
1367
1603
|
tx.session.path, tx.mutations,
|
1368
1604
|
transaction_id: tx.transaction_id,
|
1369
1605
|
commit_options: commit_options,
|
1606
|
+
request_options: request_options,
|
1370
1607
|
call_options: call_options
|
1371
1608
|
resp = CommitResponse.from_grpc commit_resp
|
1372
1609
|
commit_options ? resp : resp.timestamp
|
@@ -1397,6 +1634,7 @@ module Google
|
|
1397
1634
|
|
1398
1635
|
# rubocop:enable Metrics/AbcSize
|
1399
1636
|
# rubocop:enable Metrics/MethodLength
|
1637
|
+
# rubocop:enable Metrics/BlockLength
|
1400
1638
|
|
1401
1639
|
##
|
1402
1640
|
# Creates a snapshot read-only transaction for reads that execute
|
@@ -1508,12 +1746,13 @@ module Google
|
|
1508
1746
|
# Hash values must contain the type value. If a Hash is used the
|
1509
1747
|
# fields will be created using the same order as the Hash keys.
|
1510
1748
|
#
|
1511
|
-
# Supported type values
|
1749
|
+
# Supported type values include:
|
1512
1750
|
#
|
1513
1751
|
# * `:BOOL`
|
1514
1752
|
# * `:BYTES`
|
1515
1753
|
# * `:DATE`
|
1516
1754
|
# * `:FLOAT64`
|
1755
|
+
# * `:NUMERIC`
|
1517
1756
|
# * `:INT64`
|
1518
1757
|
# * `:STRING`
|
1519
1758
|
# * `:TIMESTAMP`
|
@@ -1804,11 +2043,10 @@ module Google
|
|
1804
2043
|
# GRPC::Aborted
|
1805
2044
|
def delay_from_aborted err
|
1806
2045
|
return nil if err.nil?
|
1807
|
-
if err.respond_to?(:metadata) && err.metadata["
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
nanos = err.metadata["retryDelay"]["nanos"].to_i
|
2046
|
+
if err.respond_to?(:metadata) && err.metadata["google.rpc.retryinfo-bin"]
|
2047
|
+
retry_info = Google::Rpc::RetryInfo.decode err.metadata["google.rpc.retryinfo-bin"]
|
2048
|
+
seconds = retry_info["retry_delay"].seconds
|
2049
|
+
nanos = retry_info["retry_delay"].nanos
|
1812
2050
|
return seconds if nanos.zero?
|
1813
2051
|
return seconds + (nanos / 1_000_000_000.0)
|
1814
2052
|
end
|