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.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/lib/google-cloud-spanner.rb +106 -0
  3. data/lib/google/cloud/spanner.rb +382 -0
  4. data/lib/google/cloud/spanner/admin/database/v1.rb +17 -0
  5. data/lib/google/cloud/spanner/admin/database/v1/database_admin_client.rb +703 -0
  6. data/lib/google/cloud/spanner/admin/database/v1/database_admin_client_config.json +73 -0
  7. data/lib/google/cloud/spanner/admin/database/v1/doc/google/iam/v1/policy.rb +139 -0
  8. data/lib/google/cloud/spanner/admin/database/v1/doc/google/protobuf/any.rb +114 -0
  9. data/lib/google/cloud/spanner/admin/database/v1/doc/google/rpc/status.rb +83 -0
  10. data/lib/google/cloud/spanner/admin/database/v1/doc/google/spanner/admin/database/v1/spanner_database_admin.rb +188 -0
  11. data/lib/google/cloud/spanner/admin/instance/v1.rb +17 -0
  12. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/iam/v1/policy.rb +139 -0
  13. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/any.rb +114 -0
  14. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/field_mask.rb +223 -0
  15. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/rpc/status.rb +83 -0
  16. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/spanner/admin/instance/v1/spanner_instance_admin.rb +268 -0
  17. data/lib/google/cloud/spanner/admin/instance/v1/instance_admin_client.rb +868 -0
  18. data/lib/google/cloud/spanner/admin/instance/v1/instance_admin_client_config.json +78 -0
  19. data/lib/google/cloud/spanner/client.rb +1034 -0
  20. data/lib/google/cloud/spanner/commit.rb +351 -0
  21. data/lib/google/cloud/spanner/convert.rb +311 -0
  22. data/lib/google/cloud/spanner/credentials.rb +32 -0
  23. data/lib/google/cloud/spanner/data.rb +199 -0
  24. data/lib/google/cloud/spanner/database.rb +377 -0
  25. data/lib/google/cloud/spanner/database/job.rb +179 -0
  26. data/lib/google/cloud/spanner/database/list.rb +171 -0
  27. data/lib/google/cloud/spanner/errors.rb +73 -0
  28. data/lib/google/cloud/spanner/fields.rb +252 -0
  29. data/lib/google/cloud/spanner/instance.rb +472 -0
  30. data/lib/google/cloud/spanner/instance/config.rb +99 -0
  31. data/lib/google/cloud/spanner/instance/config/list.rb +171 -0
  32. data/lib/google/cloud/spanner/instance/job.rb +197 -0
  33. data/lib/google/cloud/spanner/instance/list.rb +167 -0
  34. data/lib/google/cloud/spanner/policy.rb +201 -0
  35. data/lib/google/cloud/spanner/pool.rb +279 -0
  36. data/lib/google/cloud/spanner/project.rb +480 -0
  37. data/lib/google/cloud/spanner/range.rb +99 -0
  38. data/lib/google/cloud/spanner/results.rb +280 -0
  39. data/lib/google/cloud/spanner/service.rb +458 -0
  40. data/lib/google/cloud/spanner/session.rb +565 -0
  41. data/lib/google/cloud/spanner/snapshot.rb +260 -0
  42. data/lib/google/cloud/spanner/transaction.rb +533 -0
  43. data/lib/google/cloud/spanner/v1.rb +17 -0
  44. data/lib/google/cloud/spanner/v1/doc/google/protobuf/duration.rb +77 -0
  45. data/lib/google/cloud/spanner/v1/doc/google/protobuf/struct.rb +73 -0
  46. data/lib/google/cloud/spanner/v1/doc/google/protobuf/timestamp.rb +81 -0
  47. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/keys.rb +148 -0
  48. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/mutation.rb +80 -0
  49. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/query_plan.rb +120 -0
  50. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/result_set.rb +175 -0
  51. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/spanner.rb +206 -0
  52. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/transaction.rb +351 -0
  53. data/lib/google/cloud/spanner/v1/spanner_client.rb +850 -0
  54. data/lib/google/cloud/spanner/v1/spanner_client_config.json +78 -0
  55. data/lib/google/cloud/spanner/version.rb +22 -0
  56. data/lib/google/spanner/admin/database/v1/spanner_database_admin_pb.rb +85 -0
  57. data/lib/google/spanner/admin/database/v1/spanner_database_admin_services_pb.rb +95 -0
  58. data/lib/google/spanner/admin/instance/v1/spanner_instance_admin_pb.rb +106 -0
  59. data/lib/google/spanner/admin/instance/v1/spanner_instance_admin_services_pb.rb +180 -0
  60. data/lib/google/spanner/v1/keys_pb.rb +33 -0
  61. data/lib/google/spanner/v1/mutation_pb.rb +38 -0
  62. data/lib/google/spanner/v1/query_plan_pb.rb +47 -0
  63. data/lib/google/spanner/v1/result_set_pb.rb +43 -0
  64. data/lib/google/spanner/v1/spanner_pb.rb +90 -0
  65. data/lib/google/spanner/v1/spanner_services_pb.rb +131 -0
  66. data/lib/google/spanner/v1/transaction_pb.rb +51 -0
  67. data/lib/google/spanner/v1/type_pb.rb +43 -0
  68. metadata +309 -0
@@ -0,0 +1,17 @@
1
+
2
+ # Copyright 2016 Google Inc. All rights reserved.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+
17
+ require "google/cloud/spanner/admin/database/v1/database_admin_client"
@@ -0,0 +1,703 @@
1
+ # Copyright 2017, 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
+ # EDITING INSTRUCTIONS
16
+ # This file was generated from the file
17
+ # https://github.com/googleapis/googleapis/blob/master/google/spanner/admin/database/v1/spanner_database_admin.proto,
18
+ # and updates to that file get reflected here through a refresh process.
19
+ # For the short term, the refresh process will only be runnable by Google
20
+ # engineers.
21
+ #
22
+ # The only allowed edits are to method and file documentation. A 3-way
23
+ # merge preserves those additions if the generated source changes.
24
+
25
+ require "json"
26
+ require "pathname"
27
+
28
+ require "google/gax"
29
+ require "google/gax/operation"
30
+ require "google/longrunning/operations_client"
31
+
32
+ require "google/spanner/admin/database/v1/spanner_database_admin_pb"
33
+
34
+ module Google
35
+ module Cloud
36
+ module Spanner
37
+ module Admin
38
+ module Database
39
+ module V1
40
+ # Cloud Spanner Database Admin API
41
+ #
42
+ # The Cloud Spanner Database Admin API can be used to create, drop, and
43
+ # list databases. It also enables updating the schema of pre-existing
44
+ # databases.
45
+ #
46
+ # @!attribute [r] database_admin_stub
47
+ # @return [Google::Spanner::Admin::Database::V1::DatabaseAdmin::Stub]
48
+ class DatabaseAdminClient
49
+ attr_reader :database_admin_stub
50
+
51
+ # The default address of the service.
52
+ SERVICE_ADDRESS = "spanner.googleapis.com".freeze
53
+
54
+ # The default port of the service.
55
+ DEFAULT_SERVICE_PORT = 443
56
+
57
+ DEFAULT_TIMEOUT = 30
58
+
59
+ PAGE_DESCRIPTORS = {
60
+ "list_databases" => Google::Gax::PageDescriptor.new(
61
+ "page_token",
62
+ "next_page_token",
63
+ "databases")
64
+ }.freeze
65
+
66
+ private_constant :PAGE_DESCRIPTORS
67
+
68
+ # The scopes needed to make gRPC calls to all of the methods defined in
69
+ # this service.
70
+ ALL_SCOPES = [
71
+ "https://www.googleapis.com/auth/cloud-platform",
72
+ "https://www.googleapis.com/auth/spanner.admin"
73
+ ].freeze
74
+
75
+ INSTANCE_PATH_TEMPLATE = Google::Gax::PathTemplate.new(
76
+ "projects/{project}/instances/{instance}"
77
+ )
78
+
79
+ private_constant :INSTANCE_PATH_TEMPLATE
80
+
81
+ DATABASE_PATH_TEMPLATE = Google::Gax::PathTemplate.new(
82
+ "projects/{project}/instances/{instance}/databases/{database}"
83
+ )
84
+
85
+ private_constant :DATABASE_PATH_TEMPLATE
86
+
87
+ # Returns a fully-qualified instance resource name string.
88
+ # @param project [String]
89
+ # @param instance [String]
90
+ # @return [String]
91
+ def self.instance_path project, instance
92
+ INSTANCE_PATH_TEMPLATE.render(
93
+ :"project" => project,
94
+ :"instance" => instance
95
+ )
96
+ end
97
+
98
+ # Returns a fully-qualified database resource name string.
99
+ # @param project [String]
100
+ # @param instance [String]
101
+ # @param database [String]
102
+ # @return [String]
103
+ def self.database_path project, instance, database
104
+ DATABASE_PATH_TEMPLATE.render(
105
+ :"project" => project,
106
+ :"instance" => instance,
107
+ :"database" => database
108
+ )
109
+ end
110
+
111
+ # Parses the project from a instance resource.
112
+ # @param instance_name [String]
113
+ # @return [String]
114
+ def self.match_project_from_instance_name instance_name
115
+ INSTANCE_PATH_TEMPLATE.match(instance_name)["project"]
116
+ end
117
+
118
+ # Parses the instance from a instance resource.
119
+ # @param instance_name [String]
120
+ # @return [String]
121
+ def self.match_instance_from_instance_name instance_name
122
+ INSTANCE_PATH_TEMPLATE.match(instance_name)["instance"]
123
+ end
124
+
125
+ # Parses the project from a database resource.
126
+ # @param database_name [String]
127
+ # @return [String]
128
+ def self.match_project_from_database_name database_name
129
+ DATABASE_PATH_TEMPLATE.match(database_name)["project"]
130
+ end
131
+
132
+ # Parses the instance from a database resource.
133
+ # @param database_name [String]
134
+ # @return [String]
135
+ def self.match_instance_from_database_name database_name
136
+ DATABASE_PATH_TEMPLATE.match(database_name)["instance"]
137
+ end
138
+
139
+ # Parses the database from a database resource.
140
+ # @param database_name [String]
141
+ # @return [String]
142
+ def self.match_database_from_database_name database_name
143
+ DATABASE_PATH_TEMPLATE.match(database_name)["database"]
144
+ end
145
+
146
+ # @param service_path [String]
147
+ # The domain name of the API remote host.
148
+ # @param port [Integer]
149
+ # The port on which to connect to the remote host.
150
+ # @param channel [Channel]
151
+ # A Channel object through which to make calls.
152
+ # @param chan_creds [Grpc::ChannelCredentials]
153
+ # A ChannelCredentials for the setting up the RPC client.
154
+ # @param client_config[Hash]
155
+ # A Hash for call options for each method. See
156
+ # Google::Gax#construct_settings for the structure of
157
+ # this data. Falls back to the default config if not specified
158
+ # or the specified config is missing data points.
159
+ # @param timeout [Numeric]
160
+ # The default timeout, in seconds, for calls made through this client.
161
+ def initialize \
162
+ service_path: SERVICE_ADDRESS,
163
+ port: DEFAULT_SERVICE_PORT,
164
+ channel: nil,
165
+ chan_creds: nil,
166
+ scopes: ALL_SCOPES,
167
+ client_config: {},
168
+ timeout: DEFAULT_TIMEOUT,
169
+ app_name: nil,
170
+ app_version: nil,
171
+ lib_name: nil,
172
+ lib_version: ""
173
+ # These require statements are intentionally placed here to initialize
174
+ # the gRPC module only when it's required.
175
+ # See https://github.com/googleapis/toolkit/issues/446
176
+ require "google/gax/grpc"
177
+ require "google/spanner/admin/database/v1/spanner_database_admin_services_pb"
178
+
179
+ @operations_client = Google::Longrunning::OperationsClient.new(
180
+ service_path: service_path,
181
+ port: port,
182
+ channel: channel,
183
+ chan_creds: chan_creds,
184
+ scopes: scopes,
185
+ client_config: client_config,
186
+ timeout: timeout,
187
+ app_name: app_name,
188
+ app_version: app_version,
189
+ lib_name: lib_name,
190
+ lib_version: lib_version,
191
+ )
192
+
193
+ if app_name || app_version
194
+ warn "`app_name` and `app_version` are no longer being used in the request headers."
195
+ end
196
+
197
+ google_api_client = "gl-ruby/#{RUBY_VERSION}"
198
+ google_api_client << " #{lib_name}/#{lib_version}" if lib_name
199
+ google_api_client << " gapic/0.6.8 gax/#{Google::Gax::VERSION}"
200
+ google_api_client << " grpc/#{GRPC::VERSION}"
201
+ google_api_client.freeze
202
+
203
+ headers = { :"x-goog-api-client" => google_api_client }
204
+ client_config_file = Pathname.new(__dir__).join(
205
+ "database_admin_client_config.json"
206
+ )
207
+ defaults = client_config_file.open do |f|
208
+ Google::Gax.construct_settings(
209
+ "google.spanner.admin.database.v1.DatabaseAdmin",
210
+ JSON.parse(f.read),
211
+ client_config,
212
+ Google::Gax::Grpc::STATUS_CODE_NAMES,
213
+ timeout,
214
+ page_descriptors: PAGE_DESCRIPTORS,
215
+ errors: Google::Gax::Grpc::API_ERRORS,
216
+ kwargs: headers
217
+ )
218
+ end
219
+ @database_admin_stub = Google::Gax::Grpc.create_stub(
220
+ service_path,
221
+ port,
222
+ chan_creds: chan_creds,
223
+ channel: channel,
224
+ scopes: scopes,
225
+ &Google::Spanner::Admin::Database::V1::DatabaseAdmin::Stub.method(:new)
226
+ )
227
+
228
+ @list_databases = Google::Gax.create_api_call(
229
+ @database_admin_stub.method(:list_databases),
230
+ defaults["list_databases"]
231
+ )
232
+ @create_database = Google::Gax.create_api_call(
233
+ @database_admin_stub.method(:create_database),
234
+ defaults["create_database"]
235
+ )
236
+ @get_database = Google::Gax.create_api_call(
237
+ @database_admin_stub.method(:get_database),
238
+ defaults["get_database"]
239
+ )
240
+ @update_database_ddl = Google::Gax.create_api_call(
241
+ @database_admin_stub.method(:update_database_ddl),
242
+ defaults["update_database_ddl"]
243
+ )
244
+ @drop_database = Google::Gax.create_api_call(
245
+ @database_admin_stub.method(:drop_database),
246
+ defaults["drop_database"]
247
+ )
248
+ @get_database_ddl = Google::Gax.create_api_call(
249
+ @database_admin_stub.method(:get_database_ddl),
250
+ defaults["get_database_ddl"]
251
+ )
252
+ @set_iam_policy = Google::Gax.create_api_call(
253
+ @database_admin_stub.method(:set_iam_policy),
254
+ defaults["set_iam_policy"]
255
+ )
256
+ @get_iam_policy = Google::Gax.create_api_call(
257
+ @database_admin_stub.method(:get_iam_policy),
258
+ defaults["get_iam_policy"]
259
+ )
260
+ @test_iam_permissions = Google::Gax.create_api_call(
261
+ @database_admin_stub.method(:test_iam_permissions),
262
+ defaults["test_iam_permissions"]
263
+ )
264
+ end
265
+
266
+ # Service calls
267
+
268
+ # Lists Cloud Spanner databases.
269
+ #
270
+ # @param parent [String]
271
+ # Required. The instance whose databases should be listed.
272
+ # Values are of the form +projects/<project>/instances/<instance>+.
273
+ # @param page_size [Integer]
274
+ # The maximum number of resources contained in the underlying API
275
+ # response. If page streaming is performed per-resource, this
276
+ # parameter does not affect the return value. If page streaming is
277
+ # performed per-page, this determines the maximum number of
278
+ # resources in a page.
279
+ # @param options [Google::Gax::CallOptions]
280
+ # Overrides the default settings for this call, e.g, timeout,
281
+ # retries, etc.
282
+ # @return [Google::Gax::PagedEnumerable<Google::Spanner::Admin::Database::V1::Database>]
283
+ # An enumerable of Google::Spanner::Admin::Database::V1::Database instances.
284
+ # See Google::Gax::PagedEnumerable documentation for other
285
+ # operations such as per-page iteration or access to the response
286
+ # object.
287
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
288
+ # @example
289
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
290
+ #
291
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
292
+ #
293
+ # database_admin_client = DatabaseAdminClient.new
294
+ # formatted_parent = DatabaseAdminClient.instance_path("[PROJECT]", "[INSTANCE]")
295
+ #
296
+ # # Iterate over all results.
297
+ # database_admin_client.list_databases(formatted_parent).each do |element|
298
+ # # Process element.
299
+ # end
300
+ #
301
+ # # Or iterate over results one page at a time.
302
+ # database_admin_client.list_databases(formatted_parent).each_page do |page|
303
+ # # Process each page at a time.
304
+ # page.each do |element|
305
+ # # Process element.
306
+ # end
307
+ # end
308
+
309
+ def list_databases \
310
+ parent,
311
+ page_size: nil,
312
+ options: nil
313
+ req = Google::Spanner::Admin::Database::V1::ListDatabasesRequest.new({
314
+ parent: parent,
315
+ page_size: page_size
316
+ }.delete_if { |_, v| v.nil? })
317
+ @list_databases.call(req, options)
318
+ end
319
+
320
+ # Creates a new Cloud Spanner database and starts to prepare it for serving.
321
+ # The returned Long-running operation will
322
+ # have a name of the format +<database_name>/operations/<operation_id>+ and
323
+ # can be used to track preparation of the database. The
324
+ # Metadata field type is
325
+ # CreateDatabaseMetadata. The
326
+ # Response field type is
327
+ # Database, if successful.
328
+ #
329
+ # @param parent [String]
330
+ # Required. The name of the instance that will serve the new database.
331
+ # Values are of the form +projects/<project>/instances/<instance>+.
332
+ # @param create_statement [String]
333
+ # Required. A +CREATE DATABASE+ statement, which specifies the ID of the
334
+ # new database. The database ID must conform to the regular expression
335
+ # +[a-z][a-z0-9_\-]*[a-z0-9]+ and be between 2 and 30 characters in length.
336
+ # @param extra_statements [Array<String>]
337
+ # An optional list of DDL statements to run inside the newly created
338
+ # database. Statements can create tables, indexes, etc. These
339
+ # statements execute atomically with the creation of the database:
340
+ # if there is an error in any statement, the database is not created.
341
+ # @param options [Google::Gax::CallOptions]
342
+ # Overrides the default settings for this call, e.g, timeout,
343
+ # retries, etc.
344
+ # @return [Google::Gax::Operation]
345
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
346
+ # @example
347
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
348
+ #
349
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
350
+ #
351
+ # database_admin_client = DatabaseAdminClient.new
352
+ # formatted_parent = DatabaseAdminClient.instance_path("[PROJECT]", "[INSTANCE]")
353
+ # create_statement = ''
354
+ #
355
+ # # Register a callback during the method call.
356
+ # operation = database_admin_client.create_database(formatted_parent, create_statement) do |op|
357
+ # raise op.results.message if op.error?
358
+ # op_results = op.results
359
+ # # Process the results.
360
+ #
361
+ # metadata = op.metadata
362
+ # # Process the metadata.
363
+ # end
364
+ #
365
+ # # Or use the return value to register a callback.
366
+ # operation.on_done do |op|
367
+ # raise op.results.message if op.error?
368
+ # op_results = op.results
369
+ # # Process the results.
370
+ #
371
+ # metadata = op.metadata
372
+ # # Process the metadata.
373
+ # end
374
+ #
375
+ # # Manually reload the operation.
376
+ # operation.reload!
377
+ #
378
+ # # Or block until the operation completes, triggering callbacks on
379
+ # # completion.
380
+ # operation.wait_until_done!
381
+
382
+ def create_database \
383
+ parent,
384
+ create_statement,
385
+ extra_statements: nil,
386
+ options: nil
387
+ req = Google::Spanner::Admin::Database::V1::CreateDatabaseRequest.new({
388
+ parent: parent,
389
+ create_statement: create_statement,
390
+ extra_statements: extra_statements
391
+ }.delete_if { |_, v| v.nil? })
392
+ operation = Google::Gax::Operation.new(
393
+ @create_database.call(req, options),
394
+ @operations_client,
395
+ Google::Spanner::Admin::Database::V1::Database,
396
+ Google::Spanner::Admin::Database::V1::CreateDatabaseMetadata,
397
+ call_options: options
398
+ )
399
+ operation.on_done { |operation| yield(operation) } if block_given?
400
+ operation
401
+ end
402
+
403
+ # Gets the state of a Cloud Spanner database.
404
+ #
405
+ # @param name [String]
406
+ # Required. The name of the requested database. Values are of the form
407
+ # +projects/<project>/instances/<instance>/databases/<database>+.
408
+ # @param options [Google::Gax::CallOptions]
409
+ # Overrides the default settings for this call, e.g, timeout,
410
+ # retries, etc.
411
+ # @return [Google::Spanner::Admin::Database::V1::Database]
412
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
413
+ # @example
414
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
415
+ #
416
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
417
+ #
418
+ # database_admin_client = DatabaseAdminClient.new
419
+ # formatted_name = DatabaseAdminClient.database_path("[PROJECT]", "[INSTANCE]", "[DATABASE]")
420
+ # response = database_admin_client.get_database(formatted_name)
421
+
422
+ def get_database \
423
+ name,
424
+ options: nil
425
+ req = Google::Spanner::Admin::Database::V1::GetDatabaseRequest.new({
426
+ name: name
427
+ }.delete_if { |_, v| v.nil? })
428
+ @get_database.call(req, options)
429
+ end
430
+
431
+ # Updates the schema of a Cloud Spanner database by
432
+ # creating/altering/dropping tables, columns, indexes, etc. The returned
433
+ # Long-running operation will have a name of
434
+ # the format +<database_name>/operations/<operation_id>+ and can be used to
435
+ # track execution of the schema change(s). The
436
+ # Metadata field type is
437
+ # UpdateDatabaseDdlMetadata. The operation has no response.
438
+ #
439
+ # @param database [String]
440
+ # Required. The database to update.
441
+ # @param statements [Array<String>]
442
+ # DDL statements to be applied to the database.
443
+ # @param operation_id [String]
444
+ # If empty, the new update request is assigned an
445
+ # automatically-generated operation ID. Otherwise, +operation_id+
446
+ # is used to construct the name of the resulting
447
+ # Operation.
448
+ #
449
+ # Specifying an explicit operation ID simplifies determining
450
+ # whether the statements were executed in the event that the
451
+ # UpdateDatabaseDdl call is replayed,
452
+ # or the return value is otherwise lost: the Database and
453
+ # +operation_id+ fields can be combined to form the
454
+ # Name of the resulting
455
+ # Longrunning::Operation: +<database>/operations/<operation_id>+.
456
+ #
457
+ # +operation_id+ should be unique within the database, and must be
458
+ # a valid identifier: +[a-z][a-z0-9_]*+. Note that
459
+ # automatically-generated operation IDs always begin with an
460
+ # underscore. If the named operation already exists,
461
+ # UpdateDatabaseDdl returns
462
+ # +ALREADY_EXISTS+.
463
+ # @param options [Google::Gax::CallOptions]
464
+ # Overrides the default settings for this call, e.g, timeout,
465
+ # retries, etc.
466
+ # @return [Google::Gax::Operation]
467
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
468
+ # @example
469
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
470
+ #
471
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
472
+ #
473
+ # database_admin_client = DatabaseAdminClient.new
474
+ # formatted_database = DatabaseAdminClient.database_path("[PROJECT]", "[INSTANCE]", "[DATABASE]")
475
+ # statements = []
476
+ #
477
+ # # Register a callback during the method call.
478
+ # operation = database_admin_client.update_database_ddl(formatted_database, statements) do |op|
479
+ # raise op.results.message if op.error?
480
+ # op_results = op.results
481
+ # # Process the results.
482
+ #
483
+ # metadata = op.metadata
484
+ # # Process the metadata.
485
+ # end
486
+ #
487
+ # # Or use the return value to register a callback.
488
+ # operation.on_done do |op|
489
+ # raise op.results.message if op.error?
490
+ # op_results = op.results
491
+ # # Process the results.
492
+ #
493
+ # metadata = op.metadata
494
+ # # Process the metadata.
495
+ # end
496
+ #
497
+ # # Manually reload the operation.
498
+ # operation.reload!
499
+ #
500
+ # # Or block until the operation completes, triggering callbacks on
501
+ # # completion.
502
+ # operation.wait_until_done!
503
+
504
+ def update_database_ddl \
505
+ database,
506
+ statements,
507
+ operation_id: nil,
508
+ options: nil
509
+ req = Google::Spanner::Admin::Database::V1::UpdateDatabaseDdlRequest.new({
510
+ database: database,
511
+ statements: statements,
512
+ operation_id: operation_id
513
+ }.delete_if { |_, v| v.nil? })
514
+ operation = Google::Gax::Operation.new(
515
+ @update_database_ddl.call(req, options),
516
+ @operations_client,
517
+ Google::Protobuf::Empty,
518
+ Google::Spanner::Admin::Database::V1::UpdateDatabaseDdlMetadata,
519
+ call_options: options
520
+ )
521
+ operation.on_done { |operation| yield(operation) } if block_given?
522
+ operation
523
+ end
524
+
525
+ # Drops (aka deletes) a Cloud Spanner database.
526
+ #
527
+ # @param database [String]
528
+ # Required. The database to be dropped.
529
+ # @param options [Google::Gax::CallOptions]
530
+ # Overrides the default settings for this call, e.g, timeout,
531
+ # retries, etc.
532
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
533
+ # @example
534
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
535
+ #
536
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
537
+ #
538
+ # database_admin_client = DatabaseAdminClient.new
539
+ # formatted_database = DatabaseAdminClient.database_path("[PROJECT]", "[INSTANCE]", "[DATABASE]")
540
+ # database_admin_client.drop_database(formatted_database)
541
+
542
+ def drop_database \
543
+ database,
544
+ options: nil
545
+ req = Google::Spanner::Admin::Database::V1::DropDatabaseRequest.new({
546
+ database: database
547
+ }.delete_if { |_, v| v.nil? })
548
+ @drop_database.call(req, options)
549
+ nil
550
+ end
551
+
552
+ # Returns the schema of a Cloud Spanner database as a list of formatted
553
+ # DDL statements. This method does not show pending schema updates, those may
554
+ # be queried using the Operations API.
555
+ #
556
+ # @param database [String]
557
+ # Required. The database whose schema we wish to get.
558
+ # @param options [Google::Gax::CallOptions]
559
+ # Overrides the default settings for this call, e.g, timeout,
560
+ # retries, etc.
561
+ # @return [Google::Spanner::Admin::Database::V1::GetDatabaseDdlResponse]
562
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
563
+ # @example
564
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
565
+ #
566
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
567
+ #
568
+ # database_admin_client = DatabaseAdminClient.new
569
+ # formatted_database = DatabaseAdminClient.database_path("[PROJECT]", "[INSTANCE]", "[DATABASE]")
570
+ # response = database_admin_client.get_database_ddl(formatted_database)
571
+
572
+ def get_database_ddl \
573
+ database,
574
+ options: nil
575
+ req = Google::Spanner::Admin::Database::V1::GetDatabaseDdlRequest.new({
576
+ database: database
577
+ }.delete_if { |_, v| v.nil? })
578
+ @get_database_ddl.call(req, options)
579
+ end
580
+
581
+ # Sets the access control policy on a database resource. Replaces any
582
+ # existing policy.
583
+ #
584
+ # Authorization requires +spanner.databases.setIamPolicy+ permission on
585
+ # Resource.
586
+ #
587
+ # @param resource [String]
588
+ # REQUIRED: The resource for which the policy is being specified.
589
+ # +resource+ is usually specified as a path. For example, a Project
590
+ # resource is specified as +projects/{project}+.
591
+ # @param policy [Google::Iam::V1::Policy]
592
+ # REQUIRED: The complete policy to be applied to the +resource+. The size of
593
+ # the policy is limited to a few 10s of KB. An empty policy is a
594
+ # valid policy but certain Cloud Platform services (such as Projects)
595
+ # might reject them.
596
+ # @param options [Google::Gax::CallOptions]
597
+ # Overrides the default settings for this call, e.g, timeout,
598
+ # retries, etc.
599
+ # @return [Google::Iam::V1::Policy]
600
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
601
+ # @example
602
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
603
+ #
604
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
605
+ # Policy = Google::Iam::V1::Policy
606
+ #
607
+ # database_admin_client = DatabaseAdminClient.new
608
+ # formatted_resource = DatabaseAdminClient.database_path("[PROJECT]", "[INSTANCE]", "[DATABASE]")
609
+ # policy = Policy.new
610
+ # response = database_admin_client.set_iam_policy(formatted_resource, policy)
611
+
612
+ def set_iam_policy \
613
+ resource,
614
+ policy,
615
+ options: nil
616
+ req = Google::Iam::V1::SetIamPolicyRequest.new({
617
+ resource: resource,
618
+ policy: policy
619
+ }.delete_if { |_, v| v.nil? })
620
+ @set_iam_policy.call(req, options)
621
+ end
622
+
623
+ # Gets the access control policy for a database resource. Returns an empty
624
+ # policy if a database exists but does not have a policy set.
625
+ #
626
+ # Authorization requires +spanner.databases.getIamPolicy+ permission on
627
+ # Resource.
628
+ #
629
+ # @param resource [String]
630
+ # REQUIRED: The resource for which the policy is being requested.
631
+ # +resource+ is usually specified as a path. For example, a Project
632
+ # resource is specified as +projects/{project}+.
633
+ # @param options [Google::Gax::CallOptions]
634
+ # Overrides the default settings for this call, e.g, timeout,
635
+ # retries, etc.
636
+ # @return [Google::Iam::V1::Policy]
637
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
638
+ # @example
639
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
640
+ #
641
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
642
+ #
643
+ # database_admin_client = DatabaseAdminClient.new
644
+ # formatted_resource = DatabaseAdminClient.database_path("[PROJECT]", "[INSTANCE]", "[DATABASE]")
645
+ # response = database_admin_client.get_iam_policy(formatted_resource)
646
+
647
+ def get_iam_policy \
648
+ resource,
649
+ options: nil
650
+ req = Google::Iam::V1::GetIamPolicyRequest.new({
651
+ resource: resource
652
+ }.delete_if { |_, v| v.nil? })
653
+ @get_iam_policy.call(req, options)
654
+ end
655
+
656
+ # Returns permissions that the caller has on the specified database resource.
657
+ #
658
+ # Attempting this RPC on a non-existent Cloud Spanner database will result in
659
+ # a NOT_FOUND error if the user has +spanner.databases.list+ permission on
660
+ # the containing Cloud Spanner instance. Otherwise returns an empty set of
661
+ # permissions.
662
+ #
663
+ # @param resource [String]
664
+ # REQUIRED: The resource for which the policy detail is being requested.
665
+ # +resource+ is usually specified as a path. For example, a Project
666
+ # resource is specified as +projects/{project}+.
667
+ # @param permissions [Array<String>]
668
+ # The set of permissions to check for the +resource+. Permissions with
669
+ # wildcards (such as '*' or 'storage.*') are not allowed. For more
670
+ # information see
671
+ # {IAM Overview}[https://cloud.google.com/iam/docs/overview#permissions].
672
+ # @param options [Google::Gax::CallOptions]
673
+ # Overrides the default settings for this call, e.g, timeout,
674
+ # retries, etc.
675
+ # @return [Google::Iam::V1::TestIamPermissionsResponse]
676
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
677
+ # @example
678
+ # require "google/cloud/spanner/admin/database/v1/database_admin_client"
679
+ #
680
+ # DatabaseAdminClient = Google::Cloud::Spanner::Admin::Database::V1::DatabaseAdminClient
681
+ #
682
+ # database_admin_client = DatabaseAdminClient.new
683
+ # formatted_resource = DatabaseAdminClient.database_path("[PROJECT]", "[INSTANCE]", "[DATABASE]")
684
+ # permissions = []
685
+ # response = database_admin_client.test_iam_permissions(formatted_resource, permissions)
686
+
687
+ def test_iam_permissions \
688
+ resource,
689
+ permissions,
690
+ options: nil
691
+ req = Google::Iam::V1::TestIamPermissionsRequest.new({
692
+ resource: resource,
693
+ permissions: permissions
694
+ }.delete_if { |_, v| v.nil? })
695
+ @test_iam_permissions.call(req, options)
696
+ end
697
+ end
698
+ end
699
+ end
700
+ end
701
+ end
702
+ end
703
+ end