google-cloud-spanner 0.21.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 +7 -0
- data/lib/google-cloud-spanner.rb +106 -0
- data/lib/google/cloud/spanner.rb +382 -0
- data/lib/google/cloud/spanner/admin/database/v1.rb +17 -0
- data/lib/google/cloud/spanner/admin/database/v1/database_admin_client.rb +703 -0
- data/lib/google/cloud/spanner/admin/database/v1/database_admin_client_config.json +73 -0
- data/lib/google/cloud/spanner/admin/database/v1/doc/google/iam/v1/policy.rb +139 -0
- data/lib/google/cloud/spanner/admin/database/v1/doc/google/protobuf/any.rb +114 -0
- data/lib/google/cloud/spanner/admin/database/v1/doc/google/rpc/status.rb +83 -0
- data/lib/google/cloud/spanner/admin/database/v1/doc/google/spanner/admin/database/v1/spanner_database_admin.rb +188 -0
- data/lib/google/cloud/spanner/admin/instance/v1.rb +17 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/iam/v1/policy.rb +139 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/any.rb +114 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/field_mask.rb +223 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/rpc/status.rb +83 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/spanner/admin/instance/v1/spanner_instance_admin.rb +268 -0
- data/lib/google/cloud/spanner/admin/instance/v1/instance_admin_client.rb +868 -0
- data/lib/google/cloud/spanner/admin/instance/v1/instance_admin_client_config.json +78 -0
- data/lib/google/cloud/spanner/client.rb +1034 -0
- data/lib/google/cloud/spanner/commit.rb +351 -0
- data/lib/google/cloud/spanner/convert.rb +311 -0
- data/lib/google/cloud/spanner/credentials.rb +32 -0
- data/lib/google/cloud/spanner/data.rb +199 -0
- data/lib/google/cloud/spanner/database.rb +377 -0
- data/lib/google/cloud/spanner/database/job.rb +179 -0
- data/lib/google/cloud/spanner/database/list.rb +171 -0
- data/lib/google/cloud/spanner/errors.rb +73 -0
- data/lib/google/cloud/spanner/fields.rb +252 -0
- data/lib/google/cloud/spanner/instance.rb +472 -0
- data/lib/google/cloud/spanner/instance/config.rb +99 -0
- data/lib/google/cloud/spanner/instance/config/list.rb +171 -0
- data/lib/google/cloud/spanner/instance/job.rb +197 -0
- data/lib/google/cloud/spanner/instance/list.rb +167 -0
- data/lib/google/cloud/spanner/policy.rb +201 -0
- data/lib/google/cloud/spanner/pool.rb +279 -0
- data/lib/google/cloud/spanner/project.rb +480 -0
- data/lib/google/cloud/spanner/range.rb +99 -0
- data/lib/google/cloud/spanner/results.rb +280 -0
- data/lib/google/cloud/spanner/service.rb +458 -0
- data/lib/google/cloud/spanner/session.rb +565 -0
- data/lib/google/cloud/spanner/snapshot.rb +260 -0
- data/lib/google/cloud/spanner/transaction.rb +533 -0
- data/lib/google/cloud/spanner/v1.rb +17 -0
- data/lib/google/cloud/spanner/v1/doc/google/protobuf/duration.rb +77 -0
- data/lib/google/cloud/spanner/v1/doc/google/protobuf/struct.rb +73 -0
- data/lib/google/cloud/spanner/v1/doc/google/protobuf/timestamp.rb +81 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/keys.rb +148 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/mutation.rb +80 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/query_plan.rb +120 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/result_set.rb +175 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/spanner.rb +206 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/transaction.rb +351 -0
- data/lib/google/cloud/spanner/v1/spanner_client.rb +850 -0
- data/lib/google/cloud/spanner/v1/spanner_client_config.json +78 -0
- data/lib/google/cloud/spanner/version.rb +22 -0
- data/lib/google/spanner/admin/database/v1/spanner_database_admin_pb.rb +85 -0
- data/lib/google/spanner/admin/database/v1/spanner_database_admin_services_pb.rb +95 -0
- data/lib/google/spanner/admin/instance/v1/spanner_instance_admin_pb.rb +106 -0
- data/lib/google/spanner/admin/instance/v1/spanner_instance_admin_services_pb.rb +180 -0
- data/lib/google/spanner/v1/keys_pb.rb +33 -0
- data/lib/google/spanner/v1/mutation_pb.rb +38 -0
- data/lib/google/spanner/v1/query_plan_pb.rb +47 -0
- data/lib/google/spanner/v1/result_set_pb.rb +43 -0
- data/lib/google/spanner/v1/spanner_pb.rb +90 -0
- data/lib/google/spanner/v1/spanner_services_pb.rb +131 -0
- data/lib/google/spanner/v1/transaction_pb.rb +51 -0
- data/lib/google/spanner/v1/type_pb.rb +43 -0
- metadata +309 -0
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
# Copyright 2016 Google Inc. All rights reserved.
|
|
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
|
+
# http://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
|
+
|
|
16
|
+
require "google/cloud/spanner/errors"
|
|
17
|
+
require "google/cloud/env"
|
|
18
|
+
require "google/cloud/spanner/service"
|
|
19
|
+
require "google/cloud/spanner/client"
|
|
20
|
+
require "google/cloud/spanner/instance"
|
|
21
|
+
require "google/cloud/spanner/database"
|
|
22
|
+
require "google/cloud/spanner/range"
|
|
23
|
+
|
|
24
|
+
module Google
|
|
25
|
+
module Cloud
|
|
26
|
+
module Spanner
|
|
27
|
+
##
|
|
28
|
+
# # Project
|
|
29
|
+
#
|
|
30
|
+
# Projects are top-level containers in Google Cloud Platform. They store
|
|
31
|
+
# information about billing and authorized users, and they contain
|
|
32
|
+
# Cloud Spanner data. Each project has a friendly name and a unique ID.
|
|
33
|
+
#
|
|
34
|
+
# Google::Cloud::Spanner::Project is the main object for interacting with
|
|
35
|
+
# Cloud Spanner.
|
|
36
|
+
#
|
|
37
|
+
# {Google::Cloud::Spanner::Instance} and
|
|
38
|
+
# {Google::Cloud::Spanner::Database} objects are created,
|
|
39
|
+
# accessed, and managed by Google::Cloud::Spanner::Project.
|
|
40
|
+
#
|
|
41
|
+
# A {Google::Cloud::Spanner::Client} obtained from a project can be used
|
|
42
|
+
# to read and/or modify data in a Cloud Spanner database.
|
|
43
|
+
#
|
|
44
|
+
# See {Google::Cloud::Spanner.new} and {Google::Cloud#spanner}.
|
|
45
|
+
#
|
|
46
|
+
# @example Obtaining an instance and a database from a project.
|
|
47
|
+
# require "google/cloud"
|
|
48
|
+
#
|
|
49
|
+
# spanner = Google::Cloud::Spanner.new
|
|
50
|
+
# instance = spanner.instance "my-instance"
|
|
51
|
+
# database = instance.database "my-database"
|
|
52
|
+
#
|
|
53
|
+
# @example Obtaining a client for use with a database.
|
|
54
|
+
# require "google/cloud/spanner"
|
|
55
|
+
#
|
|
56
|
+
# spanner = Google::Cloud::Spanner.new
|
|
57
|
+
#
|
|
58
|
+
# db = spanner.client "my-instance", "my-database"
|
|
59
|
+
#
|
|
60
|
+
# db.transaction do |tx|
|
|
61
|
+
# results = tx.execute "SELECT * FROM users"
|
|
62
|
+
#
|
|
63
|
+
# results.rows.each do |row|
|
|
64
|
+
# puts "User #{row[:id]} is #{row[:name]}"
|
|
65
|
+
# end
|
|
66
|
+
# end
|
|
67
|
+
#
|
|
68
|
+
class Project
|
|
69
|
+
##
|
|
70
|
+
# @private The Service object.
|
|
71
|
+
attr_accessor :service
|
|
72
|
+
|
|
73
|
+
##
|
|
74
|
+
# @private Creates a new Spanner Project instance.
|
|
75
|
+
def initialize service
|
|
76
|
+
@service = service
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
##
|
|
80
|
+
# The identifier for the Cloud Spanner project.
|
|
81
|
+
#
|
|
82
|
+
# @example
|
|
83
|
+
# require "google/cloud"
|
|
84
|
+
#
|
|
85
|
+
# spanner = Google::Cloud::Spanner.new(
|
|
86
|
+
# project: "my-project-id",
|
|
87
|
+
# keyfile: "/path/to/keyfile.json"
|
|
88
|
+
# )
|
|
89
|
+
#
|
|
90
|
+
# spanner.project #=> "my-project-id"
|
|
91
|
+
#
|
|
92
|
+
def project
|
|
93
|
+
service.project
|
|
94
|
+
end
|
|
95
|
+
alias_method :project_id, :project
|
|
96
|
+
|
|
97
|
+
##
|
|
98
|
+
# @private Default project.
|
|
99
|
+
def self.default_project
|
|
100
|
+
ENV["SPANNER_PROJECT"] ||
|
|
101
|
+
ENV["GOOGLE_CLOUD_PROJECT"] ||
|
|
102
|
+
ENV["GCLOUD_PROJECT"] ||
|
|
103
|
+
Google::Cloud.env.project_id
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
##
|
|
107
|
+
# Retrieves the list of Cloud Spanner instances for the project.
|
|
108
|
+
#
|
|
109
|
+
# @param [String] token The `token` value returned by the last call to
|
|
110
|
+
# `instances`; indicates that this is a continuation of a call,
|
|
111
|
+
# and that the system should return the next page of data.
|
|
112
|
+
# @param [Integer] max Maximum number of instances to return.
|
|
113
|
+
#
|
|
114
|
+
# @return [Array<Google::Cloud::Spanner::Instance>] The list of
|
|
115
|
+
# instances. (See {Google::Cloud::Spanner::Instance::List})
|
|
116
|
+
#
|
|
117
|
+
# @example
|
|
118
|
+
# require "google/cloud/spanner"
|
|
119
|
+
#
|
|
120
|
+
# spanner = Google::Cloud::Spanner.new
|
|
121
|
+
#
|
|
122
|
+
# instances = spanner.instances
|
|
123
|
+
# instances.each do |instance|
|
|
124
|
+
# puts instance.instance_id
|
|
125
|
+
# end
|
|
126
|
+
#
|
|
127
|
+
# @example Retrieve all: (See {Instance::Config::List::List#all})
|
|
128
|
+
# require "google/cloud/spanner"
|
|
129
|
+
#
|
|
130
|
+
# spanner = Google::Cloud::Spanner.new
|
|
131
|
+
#
|
|
132
|
+
# instances = spanner.instances
|
|
133
|
+
# instances.all do |instance|
|
|
134
|
+
# puts instance.instance_id
|
|
135
|
+
# end
|
|
136
|
+
#
|
|
137
|
+
def instances token: nil, max: nil
|
|
138
|
+
ensure_service!
|
|
139
|
+
grpc = service.list_instances token: token, max: max
|
|
140
|
+
Instance::List.from_grpc grpc, service, max
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
##
|
|
144
|
+
# Retrieves a Cloud Spanner instance by unique identifier.
|
|
145
|
+
#
|
|
146
|
+
# @param [String] instance_id The unique identifier for the instance.
|
|
147
|
+
#
|
|
148
|
+
# @return [Google::Cloud::Spanner::Instance, nil] The instance, or `nil`
|
|
149
|
+
# if the instance does not exist.
|
|
150
|
+
#
|
|
151
|
+
# @example
|
|
152
|
+
# require "google/cloud/spanner"
|
|
153
|
+
#
|
|
154
|
+
# spanner = Google::Cloud::Spanner.new
|
|
155
|
+
# instance = spanner.instance "my-instance"
|
|
156
|
+
#
|
|
157
|
+
# @example Will return `nil` if instance does not exist.
|
|
158
|
+
# require "google/cloud/spanner"
|
|
159
|
+
#
|
|
160
|
+
# spanner = Google::Cloud::Spanner.new
|
|
161
|
+
# instance = spanner.instance "non-existing" #=> nil
|
|
162
|
+
#
|
|
163
|
+
def instance instance_id
|
|
164
|
+
ensure_service!
|
|
165
|
+
grpc = service.get_instance instance_id
|
|
166
|
+
Instance.from_grpc grpc, service
|
|
167
|
+
rescue Google::Cloud::NotFoundError
|
|
168
|
+
nil
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
##
|
|
172
|
+
# Creates a Cloud Spanner instance and starts preparing it to begin
|
|
173
|
+
# serving.
|
|
174
|
+
#
|
|
175
|
+
# See {Instance::Job}.
|
|
176
|
+
#
|
|
177
|
+
# @param [String] instance_id The unique identifier for the instance,
|
|
178
|
+
# which cannot be changed after the instance is created. Values are of
|
|
179
|
+
# the form `[a-z][-a-z0-9]*[a-z0-9]` and must be between 6 and 30
|
|
180
|
+
# characters in length. Required.
|
|
181
|
+
# @param [String] name The descriptive name for this instance as it
|
|
182
|
+
# appears in UIs. Must be unique per project and between 4 and 30
|
|
183
|
+
# characters in length. Required.
|
|
184
|
+
# @param [String, Instance::Config] config The name of the instance's
|
|
185
|
+
# configuration. Values can be the `instance_config_id`, the full
|
|
186
|
+
# path, or an {Instance::Config} object. Required.
|
|
187
|
+
# @param [Integer] nodes The number of nodes allocated to this instance.
|
|
188
|
+
# Required.
|
|
189
|
+
# @param [Hash] labels Cloud Labels are a flexible and lightweight
|
|
190
|
+
# mechanism for organizing cloud resources into groups that reflect a
|
|
191
|
+
# customer's organizational needs and deployment strategies. Cloud
|
|
192
|
+
# Labels can be used to filter collections of resources. They can be
|
|
193
|
+
# used to control how resource metrics are aggregated. And they can be
|
|
194
|
+
# used as arguments to policy management rules (e.g. route, firewall,
|
|
195
|
+
# load balancing, etc.).
|
|
196
|
+
#
|
|
197
|
+
# * Label keys must be between 1 and 63 characters long and must
|
|
198
|
+
# conform to the following regular expression:
|
|
199
|
+
# `[a-z]([-a-z0-9]*[a-z0-9])?`.
|
|
200
|
+
# * Label values must be between 0 and 63 characters long and must
|
|
201
|
+
# conform to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
|
|
202
|
+
# * No more than 64 labels can be associated with a given resource.
|
|
203
|
+
#
|
|
204
|
+
# @return [Instance::Job] The job representing the long-running,
|
|
205
|
+
# asynchronous processing of an instance create operation.
|
|
206
|
+
#
|
|
207
|
+
# @example
|
|
208
|
+
# require "google/cloud/spanner"
|
|
209
|
+
#
|
|
210
|
+
# spanner = Google::Cloud::Spanner.new
|
|
211
|
+
#
|
|
212
|
+
# job = spanner.create_instance "my-new-instance",
|
|
213
|
+
# name: "My New Instance",
|
|
214
|
+
# config: "regional-us-central1",
|
|
215
|
+
# nodes: 5,
|
|
216
|
+
# labels: { production: :env }
|
|
217
|
+
#
|
|
218
|
+
# job.done? #=> false
|
|
219
|
+
# job.reload! # API call
|
|
220
|
+
# job.done? #=> true
|
|
221
|
+
# instance = job.instance
|
|
222
|
+
#
|
|
223
|
+
def create_instance instance_id, name: nil, config: nil, nodes: nil,
|
|
224
|
+
labels: nil
|
|
225
|
+
config = config.path if config.respond_to? :path
|
|
226
|
+
grpc = service.create_instance \
|
|
227
|
+
instance_id, name: name, config: config, nodes: nodes,
|
|
228
|
+
labels: labels
|
|
229
|
+
Instance::Job.from_grpc grpc, service
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
##
|
|
233
|
+
# Retrieves the list of instance configurations for the project.
|
|
234
|
+
#
|
|
235
|
+
# @param [String] token The `token` value returned by the last call to
|
|
236
|
+
# `instance_configs`; indicates that this is a continuation of a call,
|
|
237
|
+
# and that the system should return the next page of data.
|
|
238
|
+
# @param [Integer] max Maximum number of instance configs to return.
|
|
239
|
+
#
|
|
240
|
+
# @return [Array<Google::Cloud::Spanner::Instance::Config>] The list of
|
|
241
|
+
# instance configurations. (See
|
|
242
|
+
# {Google::Cloud::Spanner::Instance::Config::List})
|
|
243
|
+
#
|
|
244
|
+
# @example
|
|
245
|
+
# require "google/cloud/spanner"
|
|
246
|
+
#
|
|
247
|
+
# spanner = Google::Cloud::Spanner.new
|
|
248
|
+
#
|
|
249
|
+
# instance_configs = spanner.instance_configs
|
|
250
|
+
# instance_configs.each do |config|
|
|
251
|
+
# puts config.instance_config_id
|
|
252
|
+
# end
|
|
253
|
+
#
|
|
254
|
+
# @example Retrieve all: (See {Instance::Config::List::List#all})
|
|
255
|
+
# require "google/cloud/spanner"
|
|
256
|
+
#
|
|
257
|
+
# spanner = Google::Cloud::Spanner.new
|
|
258
|
+
#
|
|
259
|
+
# instance_configs = spanner.instance_configs
|
|
260
|
+
# instance_configs.all do |config|
|
|
261
|
+
# puts config.instance_config_id
|
|
262
|
+
# end
|
|
263
|
+
#
|
|
264
|
+
def instance_configs token: nil, max: nil
|
|
265
|
+
ensure_service!
|
|
266
|
+
grpc = service.list_instance_configs token: token, max: max
|
|
267
|
+
Instance::Config::List.from_grpc grpc, service, max
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
##
|
|
271
|
+
# Retrieves an instance configuration by unique identifier.
|
|
272
|
+
#
|
|
273
|
+
# @param [String] instance_config_id The instance configuration
|
|
274
|
+
# identifier. Values can be the `instance_config_id`, or the full
|
|
275
|
+
# path.
|
|
276
|
+
#
|
|
277
|
+
# @return [Google::Cloud::Spanner::Instance::Config, nil] The instance
|
|
278
|
+
# configuration, or `nil` if the instance configuration does not
|
|
279
|
+
# exist.
|
|
280
|
+
#
|
|
281
|
+
# @example
|
|
282
|
+
# require "google/cloud/spanner"
|
|
283
|
+
#
|
|
284
|
+
# spanner = Google::Cloud::Spanner.new
|
|
285
|
+
# config = spanner.instance_config "regional-us-central1"
|
|
286
|
+
#
|
|
287
|
+
# @example Will return `nil` if instance config does not exist.
|
|
288
|
+
# require "google/cloud/spanner"
|
|
289
|
+
#
|
|
290
|
+
# spanner = Google::Cloud::Spanner.new
|
|
291
|
+
# config = spanner.instance_config "non-existing" #=> nil
|
|
292
|
+
#
|
|
293
|
+
def instance_config instance_config_id
|
|
294
|
+
ensure_service!
|
|
295
|
+
grpc = service.get_instance_config instance_config_id
|
|
296
|
+
Instance::Config.from_grpc grpc
|
|
297
|
+
rescue Google::Cloud::NotFoundError
|
|
298
|
+
nil
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
##
|
|
302
|
+
# Retrieves the list of databases for the project.
|
|
303
|
+
#
|
|
304
|
+
# @param [String] instance_id The unique identifier for the instance.
|
|
305
|
+
# @param [String] token The `token` value returned by the last call to
|
|
306
|
+
# `databases`; indicates that this is a continuation of a call,
|
|
307
|
+
# and that the system should return the next page of data.
|
|
308
|
+
# @param [Integer] max Maximum number of databases to return.
|
|
309
|
+
#
|
|
310
|
+
# @return [Array<Google::Cloud::Spanner::Database>] The list of
|
|
311
|
+
# databases. (See {Google::Cloud::Spanner::Database::List})
|
|
312
|
+
#
|
|
313
|
+
# @example
|
|
314
|
+
# require "google/cloud/spanner"
|
|
315
|
+
#
|
|
316
|
+
# spanner = Google::Cloud::Spanner.new
|
|
317
|
+
#
|
|
318
|
+
# databases = spanner.databases "my-instance"
|
|
319
|
+
# databases.each do |database|
|
|
320
|
+
# puts database.database_id
|
|
321
|
+
# end
|
|
322
|
+
#
|
|
323
|
+
# @example Retrieve all: (See {Instance::Config::List::List#all})
|
|
324
|
+
# require "google/cloud/spanner"
|
|
325
|
+
#
|
|
326
|
+
# spanner = Google::Cloud::Spanner.new
|
|
327
|
+
#
|
|
328
|
+
# databases = spanner.databases "my-instance"
|
|
329
|
+
# databases.all do |database|
|
|
330
|
+
# puts database.database_id
|
|
331
|
+
# end
|
|
332
|
+
#
|
|
333
|
+
def databases instance_id, token: nil, max: nil
|
|
334
|
+
ensure_service!
|
|
335
|
+
grpc = service.list_databases instance_id, token: token, max: max
|
|
336
|
+
Database::List.from_grpc grpc, service, instance_id, max
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
##
|
|
340
|
+
# Retrieves a database by unique identifier.
|
|
341
|
+
#
|
|
342
|
+
# @param [String] instance_id The unique identifier for the instance.
|
|
343
|
+
# @param [String] database_id The unique identifier for the database.
|
|
344
|
+
#
|
|
345
|
+
# @return [Google::Cloud::Spanner::Database, nil] The database, or `nil`
|
|
346
|
+
# if the database does not exist.
|
|
347
|
+
#
|
|
348
|
+
# @example
|
|
349
|
+
# require "google/cloud/spanner"
|
|
350
|
+
#
|
|
351
|
+
# spanner = Google::Cloud::Spanner.new
|
|
352
|
+
# database = spanner.database "my-instance", "my-database"
|
|
353
|
+
#
|
|
354
|
+
# @example Will return `nil` if instance does not exist.
|
|
355
|
+
# require "google/cloud/spanner"
|
|
356
|
+
#
|
|
357
|
+
# spanner = Google::Cloud::Spanner.new
|
|
358
|
+
# database = spanner.database "my-instance", "my-database" #=> nil
|
|
359
|
+
#
|
|
360
|
+
def database instance_id, database_id
|
|
361
|
+
ensure_service!
|
|
362
|
+
grpc = service.get_database instance_id, database_id
|
|
363
|
+
Database.from_grpc grpc, service
|
|
364
|
+
rescue Google::Cloud::NotFoundError
|
|
365
|
+
nil
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
##
|
|
369
|
+
# Creates a database and starts preparing it to begin serving.
|
|
370
|
+
#
|
|
371
|
+
# See {Database::Job}.
|
|
372
|
+
#
|
|
373
|
+
# @param [String] instance_id The unique identifier for the instance.
|
|
374
|
+
# Required.
|
|
375
|
+
# @param [String] database_id The unique identifier for the database,
|
|
376
|
+
# which cannot be changed after the database is created. Values are of
|
|
377
|
+
# the form `[a-z][a-z0-9_\-]*[a-z0-9]` and must be between 2 and 30
|
|
378
|
+
# characters in length. Required.
|
|
379
|
+
# @param [Array<String>] statements DDL statements to run inside the
|
|
380
|
+
# newly created database. Statements can create tables, indexes, etc.
|
|
381
|
+
# These statements execute atomically with the creation of the
|
|
382
|
+
# database: if there is an error in any statement, the database is not
|
|
383
|
+
# created. Optional.
|
|
384
|
+
#
|
|
385
|
+
# @return [Database::Job] The job representing the long-running,
|
|
386
|
+
# asynchronous processing of a database create operation.
|
|
387
|
+
#
|
|
388
|
+
# @example
|
|
389
|
+
# require "google/cloud/spanner"
|
|
390
|
+
#
|
|
391
|
+
# spanner = Google::Cloud::Spanner.new
|
|
392
|
+
#
|
|
393
|
+
# job = spanner.create_database "my-instance",
|
|
394
|
+
# "my-new-database"
|
|
395
|
+
#
|
|
396
|
+
# job.done? #=> false
|
|
397
|
+
# job.reload! # API call
|
|
398
|
+
# job.done? #=> true
|
|
399
|
+
# database = job.database
|
|
400
|
+
#
|
|
401
|
+
def create_database instance_id, database_id, statements: []
|
|
402
|
+
grpc = service.create_database instance_id, database_id,
|
|
403
|
+
statements: statements
|
|
404
|
+
Database::Job.from_grpc grpc, service
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
##
|
|
408
|
+
# Creates a Cloud Spanner client. A client is used to read and/or modify
|
|
409
|
+
# data in a Cloud Spanner database.
|
|
410
|
+
#
|
|
411
|
+
# @param [String] instance_id The unique identifier for the instance.
|
|
412
|
+
# Required.
|
|
413
|
+
# @param [String] database_id The unique identifier for the database.
|
|
414
|
+
# Required.
|
|
415
|
+
# @param [Hash] pool Settings to control how and when sessions are
|
|
416
|
+
# managed by the client. The following settings can be provided:
|
|
417
|
+
#
|
|
418
|
+
# * `:min` (Integer) Minimum number of sessions that the client will
|
|
419
|
+
# maintain at any point in time. The default is 10.
|
|
420
|
+
# * `:max` (Integer) Maximum number of sessions that the client will
|
|
421
|
+
# have at any point in time. The default is 100.
|
|
422
|
+
# * `:keepalive` (Numeric) The amount of time a session can be idle
|
|
423
|
+
# before an attempt is made to prevent the idle sessions from being
|
|
424
|
+
# closed by the Cloud Spanner service. The default is 1800 (30
|
|
425
|
+
# minutes).
|
|
426
|
+
# * `:write_ratio` (Float) The ratio of sessions with pre-allocated
|
|
427
|
+
# transactions to those without. Pre-allocating transactions
|
|
428
|
+
# improves the performance of writes made by the client. The higher
|
|
429
|
+
# the value, the more transactions are pre-allocated. The value must
|
|
430
|
+
# be >= 0 and <= 1. The default is 0.3.
|
|
431
|
+
# * `:fail` (true/false) When `true` the client raises a
|
|
432
|
+
# {SessionLimitError} when the client has allocated the `max` number
|
|
433
|
+
# of sessions. When `false` the client blocks until a session
|
|
434
|
+
# becomes available. The default is `true`.
|
|
435
|
+
#
|
|
436
|
+
# @return [Client] The newly created client.
|
|
437
|
+
#
|
|
438
|
+
# @example
|
|
439
|
+
# require "google/cloud/spanner"
|
|
440
|
+
#
|
|
441
|
+
# spanner = Google::Cloud::Spanner.new
|
|
442
|
+
#
|
|
443
|
+
# db = spanner.client "my-instance", "my-database"
|
|
444
|
+
#
|
|
445
|
+
# db.transaction do |tx|
|
|
446
|
+
# results = tx.execute "SELECT * FROM users"
|
|
447
|
+
#
|
|
448
|
+
# results.rows.each do |row|
|
|
449
|
+
# puts "User #{row[:id]} is #{row[:name]}"
|
|
450
|
+
# end
|
|
451
|
+
# end
|
|
452
|
+
#
|
|
453
|
+
def client instance_id, database_id, pool: {}
|
|
454
|
+
Client.new self, instance_id, database_id,
|
|
455
|
+
valid_session_pool_options(pool)
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
protected
|
|
459
|
+
|
|
460
|
+
##
|
|
461
|
+
# @private Raise an error unless an active connection to the service is
|
|
462
|
+
# available.
|
|
463
|
+
def ensure_service!
|
|
464
|
+
fail "Must have active connection to service" unless service
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
def database_path instance_id, database_id
|
|
468
|
+
Admin::Database::V1::DatabaseAdminClient.database_path(
|
|
469
|
+
project, instance_id, database_id)
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
def valid_session_pool_options opts = {}
|
|
473
|
+
{ min: opts[:min], max: opts[:max], keepalive: opts[:keepalive],
|
|
474
|
+
write_ratio: opts[:write_ratio], fail: opts[:fail]
|
|
475
|
+
}.delete_if { |_k, v| v.nil? }
|
|
476
|
+
end
|
|
477
|
+
end
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
end
|