google-cloud-spanner 2.22.0 → 2.23.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/google/cloud/spanner/admin/database.rb +9 -11
- data/lib/google/cloud/spanner/admin/instance.rb +9 -11
- data/lib/google/cloud/spanner/backup/job/list.rb +1 -2
- data/lib/google/cloud/spanner/backup/job.rb +1 -2
- data/lib/google/cloud/spanner/backup/list.rb +1 -3
- data/lib/google/cloud/spanner/backup/restore/job.rb +1 -2
- data/lib/google/cloud/spanner/batch_snapshot.rb +6 -5
- data/lib/google/cloud/spanner/batch_update.rb +1 -2
- data/lib/google/cloud/spanner/batch_write.rb +72 -0
- data/lib/google/cloud/spanner/batch_write_results.rb +142 -0
- data/lib/google/cloud/spanner/client.rb +232 -24
- data/lib/google/cloud/spanner/database/job/list.rb +1 -2
- data/lib/google/cloud/spanner/database/job.rb +1 -2
- data/lib/google/cloud/spanner/database/list.rb +2 -3
- data/lib/google/cloud/spanner/instance/config/list.rb +2 -3
- data/lib/google/cloud/spanner/instance/job.rb +2 -3
- data/lib/google/cloud/spanner/instance/list.rb +2 -3
- data/lib/google/cloud/spanner/lar_headers.rb +4 -0
- data/lib/google/cloud/spanner/mutation_group.rb +288 -0
- data/lib/google/cloud/spanner/project.rb +9 -27
- data/lib/google/cloud/spanner/service.rb +32 -6
- data/lib/google/cloud/spanner/session.rb +161 -17
- data/lib/google/cloud/spanner/transaction.rb +9 -3
- data/lib/google/cloud/spanner/version.rb +1 -1
- metadata +32 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32575eadb5e1598ba5b49fc7dc27cc70e2d6f370c52aa42cdad5e9fa3059cf41
|
4
|
+
data.tar.gz: b5bec492eed277a46d4f4031e7f9ef9ef40472df57f747a1ea88266b397fafca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c826d09f5ff0abe190d1f51a942f120ee67b032b508edba22de82b42b079e8c833ed7e044570c5f1138c0d4e85aeb9fb3d93d571ce5db8deca898f0d456cf267
|
7
|
+
data.tar.gz: e06690d05125c1af27c8fb2e5f29f0b75b1a2d9eecd31fa6865e80fc0592caba84bc2cdb864ff25bd18a8b333019fabb52f13647b42521acf0c0706049bbc0f5
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 2.23.0 (2024-06-27)
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* Support BatchWrite API ([#99](https://github.com/googleapis/ruby-spanner/issues/99))
|
8
|
+
* Support exclude_txn_from_change_streams ([#108](https://github.com/googleapis/ruby-spanner/issues/108))
|
9
|
+
#### Bug Fixes
|
10
|
+
|
11
|
+
* Resolve BigDecimal warning in Ruby 3.4 ([#103](https://github.com/googleapis/ruby-spanner/issues/103))
|
12
|
+
#### Documentation
|
13
|
+
|
14
|
+
* Update documentation regarding root partitionability ([#101](https://github.com/googleapis/ruby-spanner/issues/101))
|
15
|
+
|
3
16
|
### 2.22.0 (2024-04-01)
|
4
17
|
|
5
18
|
#### Features
|
@@ -20,6 +20,8 @@ module Google
|
|
20
20
|
module Spanner
|
21
21
|
module Admin
|
22
22
|
module Database
|
23
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize, Metrics/MethodLength
|
24
|
+
|
23
25
|
##
|
24
26
|
# Create a new client object for a DatabaseAdmin.
|
25
27
|
#
|
@@ -81,7 +83,6 @@ module Google
|
|
81
83
|
#
|
82
84
|
# @return [Admin::Database::V1::DatabaseAdmin::Client] A client object of version V1.
|
83
85
|
#
|
84
|
-
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize, Metrics/MethodLength
|
85
86
|
def self.database_admin project_id: nil,
|
86
87
|
credentials: nil,
|
87
88
|
scope: nil,
|
@@ -135,16 +136,6 @@ module Google
|
|
135
136
|
# Configure the Google Cloud Spanner Database Admin library. This configuration can be
|
136
137
|
# applied globally to all clients.
|
137
138
|
#
|
138
|
-
# @example
|
139
|
-
#
|
140
|
-
# Modify the global config, setting the timeout to 10 seconds for all admin databases.
|
141
|
-
#
|
142
|
-
# require "google/cloud/spanner/admin/database"
|
143
|
-
#
|
144
|
-
# ::Google::Cloud::Spanner::Admin::Database.configure do |config|
|
145
|
-
# config.timeout = 10.0
|
146
|
-
# end
|
147
|
-
#
|
148
139
|
# The following configuration parameters are supported:
|
149
140
|
#
|
150
141
|
# * `credentials` (*type:* `String, Hash, Google::Auth::Credentials`) -
|
@@ -172,6 +163,13 @@ module Google
|
|
172
163
|
#
|
173
164
|
# @return [::Google::Cloud::Config] The default configuration used by this library
|
174
165
|
#
|
166
|
+
# @example Modify the global config, setting the timeout to 10 seconds for all admin databases.
|
167
|
+
# require "google/cloud/spanner/admin/database"
|
168
|
+
#
|
169
|
+
# ::Google::Cloud::Spanner::Admin::Database.configure do |config|
|
170
|
+
# config.timeout = 10.0
|
171
|
+
# end
|
172
|
+
#
|
175
173
|
def self.configure
|
176
174
|
@configure ||= begin
|
177
175
|
namespace = ["Google", "Cloud", "Spanner"]
|
@@ -21,6 +21,8 @@ module Google
|
|
21
21
|
module Spanner
|
22
22
|
module Admin
|
23
23
|
module Instance
|
24
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize, Metrics/MethodLength
|
25
|
+
|
24
26
|
##
|
25
27
|
# Create a new client object for a InstanceAdmin.
|
26
28
|
#
|
@@ -81,7 +83,6 @@ module Google
|
|
81
83
|
#
|
82
84
|
# @return [Admin::Instance::V1::InstanceAdmin::Client] A client object of version V1.
|
83
85
|
#
|
84
|
-
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize, Metrics/MethodLength
|
85
86
|
def self.instance_admin project_id: nil,
|
86
87
|
credentials: nil,
|
87
88
|
scope: nil,
|
@@ -135,16 +136,6 @@ module Google
|
|
135
136
|
# Configure the Google Cloud Spanner Instance Admin library. This configuration can be
|
136
137
|
# applied globally to all clients.
|
137
138
|
#
|
138
|
-
# @example
|
139
|
-
#
|
140
|
-
# Modify the global config, setting the timeout to 10 seconds for all admin instances.
|
141
|
-
#
|
142
|
-
# require "google/cloud/spanner/admin/instance"
|
143
|
-
#
|
144
|
-
# ::Google::Cloud::Spanner::Admin::Instance.configure do |config|
|
145
|
-
# config.timeout = 10.0
|
146
|
-
# end
|
147
|
-
#
|
148
139
|
# The following configuration parameters are supported:
|
149
140
|
#
|
150
141
|
# * `credentials` (*type:* `String, Hash, Google::Auth::Credentials`) -
|
@@ -172,6 +163,13 @@ module Google
|
|
172
163
|
#
|
173
164
|
# @return [::Google::Cloud::Config] The default configuration used by this library
|
174
165
|
#
|
166
|
+
# @example Modify the global config, setting the timeout to 10 seconds for all admin instances.
|
167
|
+
# require "google/cloud/spanner/admin/instance"
|
168
|
+
#
|
169
|
+
# ::Google::Cloud::Spanner::Admin::Instance.configure do |config|
|
170
|
+
# config.timeout = 10.0
|
171
|
+
# end
|
172
|
+
#
|
175
173
|
def self.configure
|
176
174
|
@configure ||= begin
|
177
175
|
namespace = ["Google", "Cloud", "Spanner"]
|
@@ -30,8 +30,7 @@ module Google
|
|
30
30
|
# operations.
|
31
31
|
#
|
32
32
|
# @deprecated Use the result of
|
33
|
-
#
|
34
|
-
# instead.
|
33
|
+
# {Google::Cloud::Spanner::Admin::Database.database_admin}.list_backup_operations instead.
|
35
34
|
#
|
36
35
|
class List < DelegateClass(::Array)
|
37
36
|
# @private
|
@@ -36,8 +36,7 @@ module Google
|
|
36
36
|
# Long-running Operation
|
37
37
|
#
|
38
38
|
# @deprecated Use the long-running operation returned by
|
39
|
-
#
|
40
|
-
# instead.
|
39
|
+
# {Google::Cloud::Spanner::Admin::Database.database_admin}.create_backup instead.
|
41
40
|
#
|
42
41
|
# @example
|
43
42
|
# require "google/cloud/spanner"
|
@@ -28,9 +28,7 @@ module Google
|
|
28
28
|
# Google::Cloud::Spanner::Backup::List is a special case Array with
|
29
29
|
# additional values.
|
30
30
|
#
|
31
|
-
# @deprecated Use the result of
|
32
|
-
# {Google::Cloud::Spanner::Admin::Database#database_admin Client#list_backups}
|
33
|
-
# instead.
|
31
|
+
# @deprecated Use the result of {Google::Cloud::Spanner::Admin::Database.database_admin}.list_backups instead.
|
34
32
|
#
|
35
33
|
class List < DelegateClass(::Array)
|
36
34
|
# @private
|
@@ -36,8 +36,7 @@ module Google
|
|
36
36
|
# Long-running Operation
|
37
37
|
#
|
38
38
|
# @deprecated Use the long-running operation returned by
|
39
|
-
#
|
40
|
-
# instead.
|
39
|
+
# {Google::Cloud::Spanner::Admin::Database.database_admin}.restore_database instead.
|
41
40
|
#
|
42
41
|
# @example
|
43
42
|
# require "google/cloud/spanner"
|
@@ -101,12 +101,13 @@ module Google
|
|
101
101
|
# configured, although the values given may not necessarily be honored
|
102
102
|
# depending on the query and options in the request.
|
103
103
|
#
|
104
|
-
# The query
|
104
|
+
# The request will fail if the query is not root partitionable. For a
|
105
|
+
# query to be root partitionable, it needs to satisfy a few conditions.
|
106
|
+
# For example, if the query execution plan contains a [distributed
|
105
107
|
# union](https://cloud.google.com/spanner/docs/query-execution-operators#distributed_union)
|
106
|
-
# operator
|
107
|
-
#
|
108
|
-
#
|
109
|
-
# partition generation will fail.
|
108
|
+
# operator, then it must be the first operator in the plan. For more
|
109
|
+
# information about other conditions, see [Read data in
|
110
|
+
# parallel](https://cloud.google.com/spanner/docs/reads#read_data_in_parallel).
|
110
111
|
#
|
111
112
|
# @param [String] sql The SQL query string. See [Query
|
112
113
|
# syntax](https://cloud.google.com/spanner/docs/query-syntax).
|
@@ -155,8 +155,7 @@ module Google
|
|
155
155
|
end
|
156
156
|
|
157
157
|
def to_grpc
|
158
|
-
converted_params, converted_types =
|
159
|
-
Convert.to_input_params_and_types params, types
|
158
|
+
converted_params, converted_types = Convert.to_input_params_and_types params, types
|
160
159
|
# param_types is a grpc map field, can't be nil
|
161
160
|
converted_types ||= {}
|
162
161
|
V1::ExecuteBatchDmlRequest::Statement.new(
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Copyright 2024 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require "google/cloud/spanner/mutation_group"
|
16
|
+
require "google/cloud/spanner/v1"
|
17
|
+
|
18
|
+
module Google
|
19
|
+
module Cloud
|
20
|
+
module Spanner
|
21
|
+
##
|
22
|
+
# Part of the BatchWrite DSL.
|
23
|
+
#
|
24
|
+
# This object is passed as a parameter to the block passed to
|
25
|
+
# {Google::Cloud::Spanner::Client#batch_write}. Use this parameter to add
|
26
|
+
# mutation groups to the batch.
|
27
|
+
#
|
28
|
+
class BatchWrite
|
29
|
+
# @private
|
30
|
+
def initialize
|
31
|
+
@mutation_groups = []
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Adds a group of mutations
|
36
|
+
#
|
37
|
+
# @example
|
38
|
+
# require "google/cloud/spanner"
|
39
|
+
#
|
40
|
+
# spanner = Google::Cloud::Spanner.new
|
41
|
+
#
|
42
|
+
# db = spanner.client "my-instance", "my-database"
|
43
|
+
#
|
44
|
+
# results = db.batch_write do |b|
|
45
|
+
# # First mutation group
|
46
|
+
# b.mutation_group do |mg|
|
47
|
+
# mg.upsert "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# # Second mutation group
|
51
|
+
# b.mutation_group do |mg|
|
52
|
+
# mg.upsert "Singers", [{ SingerId: 17, FirstName: "Catalina", LastName: "Smith" }]
|
53
|
+
# mg.update "Albums", [{ SingerId: 17, AlbumId: 1, AlbumTitle: "Go Go Go" }]
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
def mutation_group
|
58
|
+
mg = MutationGroup.new
|
59
|
+
yield mg
|
60
|
+
@mutation_groups << mg
|
61
|
+
end
|
62
|
+
|
63
|
+
# @private
|
64
|
+
def mutation_groups_grpc
|
65
|
+
@mutation_groups.map do |mg|
|
66
|
+
Google::Cloud::Spanner::V1::BatchWriteRequest::MutationGroup.new mutations: mg.mutations
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
# Copyright 2024 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require "google/cloud/errors"
|
16
|
+
require "google/cloud/spanner/convert"
|
17
|
+
|
18
|
+
module Google
|
19
|
+
module Cloud
|
20
|
+
module Spanner
|
21
|
+
##
|
22
|
+
# Results of a batch write.
|
23
|
+
#
|
24
|
+
# This is a stream of {BatchWriteResults::BatchResult} objects, each of
|
25
|
+
# which represents a set of mutation groups applied together.
|
26
|
+
#
|
27
|
+
# Use the Ruby Enumerable module to iterate over the results.
|
28
|
+
#
|
29
|
+
class BatchWriteResults
|
30
|
+
##
|
31
|
+
# Result of a set of mutation groups applied together.
|
32
|
+
#
|
33
|
+
class BatchResult
|
34
|
+
# @private
|
35
|
+
def initialize grpc
|
36
|
+
@grpc = grpc
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# The indexes of the mutation groups applied together.
|
41
|
+
#
|
42
|
+
# @return [::Array<::Integer>]
|
43
|
+
#
|
44
|
+
def indexes
|
45
|
+
@grpc.indexes.to_a
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# The result of this set of mutation groups.
|
50
|
+
#
|
51
|
+
# @return [::Google::Rpc::Status]
|
52
|
+
#
|
53
|
+
def status
|
54
|
+
@grpc.status
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# Whether these mutation groups were successful.
|
59
|
+
#
|
60
|
+
# @return [::Boolean]
|
61
|
+
#
|
62
|
+
def ok?
|
63
|
+
status.code.zero?
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# Whether these mutation groups were unsuccessful.
|
68
|
+
#
|
69
|
+
# @return [::Boolean]
|
70
|
+
#
|
71
|
+
def error?
|
72
|
+
!ok?
|
73
|
+
end
|
74
|
+
|
75
|
+
##
|
76
|
+
# The timestamp of the commit.
|
77
|
+
#
|
78
|
+
# @return [::Time]
|
79
|
+
#
|
80
|
+
def commit_timestamp
|
81
|
+
Convert.timestamp_to_time @grpc.commit_timestamp
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# @private
|
86
|
+
def initialize enum
|
87
|
+
@enumerable = enum
|
88
|
+
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# Iterate over the results.
|
92
|
+
#
|
93
|
+
# @yield [::Google::Cloud::Spanner::BatchWriteResults::BatchResult]
|
94
|
+
#
|
95
|
+
def each &block
|
96
|
+
if defined? @results
|
97
|
+
@results.each(&block)
|
98
|
+
else
|
99
|
+
results = []
|
100
|
+
@enumerable.each do |grpc|
|
101
|
+
result = BatchResult.new grpc
|
102
|
+
results << result
|
103
|
+
yield result
|
104
|
+
end
|
105
|
+
@results = results
|
106
|
+
end
|
107
|
+
rescue GRPC::BadStatus => e
|
108
|
+
raise Google::Cloud::Error.from_error(e)
|
109
|
+
end
|
110
|
+
|
111
|
+
include Enumerable
|
112
|
+
|
113
|
+
##
|
114
|
+
# Whether all mutation groups were successful.
|
115
|
+
#
|
116
|
+
# @return [::Boolean]
|
117
|
+
#
|
118
|
+
def ok?
|
119
|
+
all?(&:ok?)
|
120
|
+
end
|
121
|
+
|
122
|
+
##
|
123
|
+
# Whether at least one mutation group encountered an error.
|
124
|
+
#
|
125
|
+
# @return [::Boolean]
|
126
|
+
#
|
127
|
+
def error?
|
128
|
+
!ok?
|
129
|
+
end
|
130
|
+
|
131
|
+
##
|
132
|
+
# A list of the indexes of successful mutation groups.
|
133
|
+
#
|
134
|
+
# @return [::Array<::Integer>]
|
135
|
+
#
|
136
|
+
def successful_indexes
|
137
|
+
flat_map { |batch_result| batch_result.ok? ? batch_result.indexes : [] }
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|