google-cloud-spanner 1.16.0 → 2.2.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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +1 -1
  3. data/CHANGELOG.md +54 -0
  4. data/CONTRIBUTING.md +5 -5
  5. data/TROUBLESHOOTING.md +0 -6
  6. data/lib/google-cloud-spanner.rb +11 -13
  7. data/lib/google/cloud/spanner.rb +6 -8
  8. data/lib/google/cloud/spanner/admin/database/credentials.rb +2 -2
  9. data/lib/google/cloud/spanner/admin/instance/credentials.rb +2 -2
  10. data/lib/google/cloud/spanner/backup.rb +1 -1
  11. data/lib/google/cloud/spanner/backup/job.rb +2 -2
  12. data/lib/google/cloud/spanner/backup/job/list.rb +2 -2
  13. data/lib/google/cloud/spanner/backup/list.rb +1 -2
  14. data/lib/google/cloud/spanner/backup/restore/job.rb +2 -2
  15. data/lib/google/cloud/spanner/batch_client.rb +2 -2
  16. data/lib/google/cloud/spanner/batch_snapshot.rb +120 -23
  17. data/lib/google/cloud/spanner/batch_update.rb +1 -1
  18. data/lib/google/cloud/spanner/client.rb +189 -30
  19. data/lib/google/cloud/spanner/commit.rb +14 -14
  20. data/lib/google/cloud/spanner/convert.rb +16 -7
  21. data/lib/google/cloud/spanner/credentials.rb +2 -2
  22. data/lib/google/cloud/spanner/data.rb +2 -2
  23. data/lib/google/cloud/spanner/database.rb +22 -22
  24. data/lib/google/cloud/spanner/database/backup_info.rb +1 -1
  25. data/lib/google/cloud/spanner/database/job.rb +3 -3
  26. data/lib/google/cloud/spanner/database/job/list.rb +2 -2
  27. data/lib/google/cloud/spanner/database/list.rb +1 -1
  28. data/lib/google/cloud/spanner/database/restore_info.rb +1 -1
  29. data/lib/google/cloud/spanner/fields.rb +8 -8
  30. data/lib/google/cloud/spanner/instance.rb +5 -12
  31. data/lib/google/cloud/spanner/instance/config.rb +1 -1
  32. data/lib/google/cloud/spanner/instance/config/list.rb +1 -1
  33. data/lib/google/cloud/spanner/instance/job.rb +2 -2
  34. data/lib/google/cloud/spanner/instance/list.rb +1 -1
  35. data/lib/google/cloud/spanner/partition.rb +4 -4
  36. data/lib/google/cloud/spanner/policy.rb +2 -2
  37. data/lib/google/cloud/spanner/results.rb +103 -24
  38. data/lib/google/cloud/spanner/service.rb +363 -350
  39. data/lib/google/cloud/spanner/session.rb +186 -31
  40. data/lib/google/cloud/spanner/snapshot.rb +60 -6
  41. data/lib/google/cloud/spanner/transaction.rb +116 -10
  42. data/lib/google/cloud/spanner/version.rb +1 -1
  43. metadata +20 -109
  44. data/lib/google/cloud/spanner/admin/database.rb +0 -149
  45. data/lib/google/cloud/spanner/admin/database/v1.rb +0 -147
  46. data/lib/google/cloud/spanner/admin/database/v1/credentials.rb +0 -46
  47. data/lib/google/cloud/spanner/admin/database/v1/database_admin_client.rb +0 -1513
  48. data/lib/google/cloud/spanner/admin/database/v1/database_admin_client_config.json +0 -111
  49. data/lib/google/cloud/spanner/admin/database/v1/doc/google/iam/v1/iam_policy.rb +0 -64
  50. data/lib/google/cloud/spanner/admin/database/v1/doc/google/iam/v1/options.rb +0 -33
  51. data/lib/google/cloud/spanner/admin/database/v1/doc/google/iam/v1/policy.rb +0 -151
  52. data/lib/google/cloud/spanner/admin/database/v1/doc/google/longrunning/operations.rb +0 -51
  53. data/lib/google/cloud/spanner/admin/database/v1/doc/google/protobuf/any.rb +0 -131
  54. data/lib/google/cloud/spanner/admin/database/v1/doc/google/protobuf/empty.rb +0 -29
  55. data/lib/google/cloud/spanner/admin/database/v1/doc/google/protobuf/field_mask.rb +0 -222
  56. data/lib/google/cloud/spanner/admin/database/v1/doc/google/protobuf/timestamp.rb +0 -113
  57. data/lib/google/cloud/spanner/admin/database/v1/doc/google/rpc/status.rb +0 -39
  58. data/lib/google/cloud/spanner/admin/database/v1/doc/google/spanner/admin/database/v1/backup.rb +0 -325
  59. data/lib/google/cloud/spanner/admin/database/v1/doc/google/spanner/admin/database/v1/spanner_database_admin.rb +0 -368
  60. data/lib/google/cloud/spanner/admin/database/v1/doc/google/type/expr.rb +0 -45
  61. data/lib/google/cloud/spanner/admin/instance.rb +0 -164
  62. data/lib/google/cloud/spanner/admin/instance/v1.rb +0 -162
  63. data/lib/google/cloud/spanner/admin/instance/v1/credentials.rb +0 -46
  64. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/iam/v1/iam_policy.rb +0 -64
  65. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/iam/v1/options.rb +0 -33
  66. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/iam/v1/policy.rb +0 -151
  67. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/longrunning/operations.rb +0 -51
  68. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/any.rb +0 -131
  69. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/empty.rb +0 -29
  70. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/field_mask.rb +0 -222
  71. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/rpc/status.rb +0 -39
  72. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/spanner/admin/instance/v1/spanner_instance_admin.rb +0 -334
  73. data/lib/google/cloud/spanner/admin/instance/v1/doc/google/type/expr.rb +0 -45
  74. data/lib/google/cloud/spanner/admin/instance/v1/instance_admin_client.rb +0 -975
  75. data/lib/google/cloud/spanner/admin/instance/v1/instance_admin_client_config.json +0 -76
  76. data/lib/google/cloud/spanner/v1.rb +0 -16
  77. data/lib/google/cloud/spanner/v1/credentials.rb +0 -42
  78. data/lib/google/cloud/spanner/v1/doc/google/protobuf/any.rb +0 -131
  79. data/lib/google/cloud/spanner/v1/doc/google/protobuf/duration.rb +0 -91
  80. data/lib/google/cloud/spanner/v1/doc/google/protobuf/empty.rb +0 -29
  81. data/lib/google/cloud/spanner/v1/doc/google/protobuf/struct.rb +0 -74
  82. data/lib/google/cloud/spanner/v1/doc/google/protobuf/timestamp.rb +0 -113
  83. data/lib/google/cloud/spanner/v1/doc/google/rpc/status.rb +0 -39
  84. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/keys.rb +0 -150
  85. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/mutation.rb +0 -95
  86. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/query_plan.rb +0 -121
  87. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/result_set.rb +0 -190
  88. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/spanner.rb +0 -570
  89. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/transaction.rb +0 -432
  90. data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/type.rb +0 -112
  91. data/lib/google/cloud/spanner/v1/spanner_client.rb +0 -1485
  92. data/lib/google/cloud/spanner/v1/spanner_client_config.json +0 -121
  93. data/lib/google/spanner/admin/database/v1/backup_pb.rb +0 -98
  94. data/lib/google/spanner/admin/database/v1/common_pb.rb +0 -28
  95. data/lib/google/spanner/admin/database/v1/spanner_database_admin_pb.rb +0 -141
  96. data/lib/google/spanner/admin/database/v1/spanner_database_admin_services_pb.rb +0 -169
  97. data/lib/google/spanner/admin/instance/v1/spanner_instance_admin_pb.rb +0 -125
  98. data/lib/google/spanner/admin/instance/v1/spanner_instance_admin_services_pb.rb +0 -181
  99. data/lib/google/spanner/v1/keys_pb.rb +0 -34
  100. data/lib/google/spanner/v1/mutation_pb.rb +0 -39
  101. data/lib/google/spanner/v1/query_plan_pb.rb +0 -48
  102. data/lib/google/spanner/v1/result_set_pb.rb +0 -48
  103. data/lib/google/spanner/v1/spanner_pb.rb +0 -179
  104. data/lib/google/spanner/v1/spanner_services_pb.rb +0 -179
  105. data/lib/google/spanner/v1/transaction_pb.rb +0 -56
  106. data/lib/google/spanner/v1/type_pb.rb +0 -44
@@ -42,7 +42,7 @@ module Google
42
42
  #
43
43
  class Session
44
44
  ##
45
- # @private The Google::Spanner::V1::Session object
45
+ # @private The `Google::Cloud::Spanner::V1::Session` object
46
46
  attr_accessor :grpc
47
47
 
48
48
  ##
@@ -150,7 +150,7 @@ module Google
150
150
  # specified using a {Fields} object.
151
151
  #
152
152
  # Types are optional.
153
- # @param [Google::Spanner::V1::TransactionSelector] transaction The
153
+ # @param [Google::Cloud::Spanner::V1::TransactionSelector] transaction The
154
154
  # transaction selector value to send. Only used for single-use
155
155
  # transactions.
156
156
  # @param [Integer] seqno A per-transaction sequence number used to
@@ -162,6 +162,19 @@ module Google
162
162
  # * `:optimizer_version` (String) The version of optimizer to use.
163
163
  # Empty to use database default. "latest" to use the latest
164
164
  # available optimizer version.
165
+ # @param [Hash] call_options A hash of values to specify the custom
166
+ # call options, e.g., timeout, retries, etc. Call options are
167
+ # optional. The following settings can be provided:
168
+ #
169
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
170
+ # that overrides the default setting.
171
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
172
+ # setting of retry policy with the following keys:
173
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
174
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
175
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
176
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
177
+ # trigger a retry.
165
178
  #
166
179
  # @return [Google::Cloud::Spanner::Results] The results of the query
167
180
  # execution.
@@ -275,8 +288,32 @@ module Google
275
288
  # puts "User #{row[:id]} is #{row[:name]}"
276
289
  # end
277
290
  #
291
+ # @example Query using custom timeout and retry policy:
292
+ # require "google/cloud/spanner"
293
+ #
294
+ # spanner = Google::Cloud::Spanner.new
295
+ #
296
+ # db = spanner.client "my-instance", "my-database"
297
+ #
298
+ # timeout = 30.0
299
+ # retry_policy = {
300
+ # initial_delay: 0.25,
301
+ # max_delay: 32.0,
302
+ # multiplier: 1.3,
303
+ # retry_codes: ["UNAVAILABLE"]
304
+ # }
305
+ # call_options = { timeout: timeout, retry_policy: retry_policy }
306
+ #
307
+ # results = db.execute_query \
308
+ # "SELECT * FROM users", call_options: call_options
309
+ #
310
+ # results.rows.each do |row|
311
+ # puts "User #{row[:id]} is #{row[:name]}"
312
+ # end
313
+ #
278
314
  def execute_query sql, params: nil, types: nil, transaction: nil,
279
- partition_token: nil, seqno: nil, query_options: nil
315
+ partition_token: nil, seqno: nil, query_options: nil,
316
+ call_options: nil
280
317
  ensure_service!
281
318
  if query_options.nil?
282
319
  query_options = @query_options
@@ -289,7 +326,8 @@ module Google
289
326
  transaction: transaction,
290
327
  partition_token: partition_token,
291
328
  seqno: seqno,
292
- query_options: query_options
329
+ query_options: query_options,
330
+ call_options: call_options
293
331
  @last_updated_at = Time.now
294
332
  results
295
333
  end
@@ -297,11 +335,25 @@ module Google
297
335
  ##
298
336
  # Executes DML statements in a batch.
299
337
  #
300
- # @param [Google::Spanner::V1::TransactionSelector] transaction The
338
+ # @param [Google::Cloud::Spanner::V1::TransactionSelector] transaction The
301
339
  # transaction selector value to send. Only used for single-use
302
340
  # transactions.
303
341
  # @param [Integer] seqno A per-transaction sequence number used to
304
342
  # identify this request.
343
+ # @param [Hash] call_options A hash of values to specify the custom
344
+ # call options, e.g., timeout, retries, etc. Call options are
345
+ # optional. The following settings can be provided:
346
+ #
347
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
348
+ # that overrides the default setting.
349
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
350
+ # setting of retry policy with the following keys:
351
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
352
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
353
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
354
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
355
+ # trigger a retry.
356
+ #
305
357
  # @yield [batch_update] a batch update object
306
358
  # @yieldparam [Google::Cloud::Spanner::BatchUpdate] batch_update a batch
307
359
  # update object accepting DML statements and optional parameters and
@@ -316,7 +368,7 @@ module Google
316
368
  # @return [Array<Integer>] A list with the exact number of rows that
317
369
  # were modified for each DML statement.
318
370
  #
319
- def batch_update transaction, seqno
371
+ def batch_update transaction, seqno, call_options: nil
320
372
  ensure_service!
321
373
 
322
374
  raise ArgumentError, "block is required" unless block_given?
@@ -325,7 +377,8 @@ module Google
325
377
  yield batch
326
378
 
327
379
  results = service.execute_batch_dml path, transaction,
328
- batch.statements, seqno
380
+ batch.statements, seqno,
381
+ call_options: call_options
329
382
  @last_updated_at = Time.now
330
383
  results
331
384
  end
@@ -346,9 +399,22 @@ module Google
346
399
  # Optional.
347
400
  # @param [Integer] limit If greater than zero, no more than this number
348
401
  # of rows will be returned. The default is no limit.
349
- # @param [Google::Spanner::V1::TransactionSelector] transaction The
402
+ # @param [Google::Cloud::Spanner::V1::TransactionSelector] transaction The
350
403
  # transaction selector value to send. Only used for single-use
351
404
  # transactions.
405
+ # @param [Hash] call_options A hash of values to specify the custom
406
+ # call options, e.g., timeout, retries, etc. Call options are
407
+ # optional. The following settings can be provided:
408
+ #
409
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
410
+ # that overrides the default setting.
411
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
412
+ # setting of retry policy with the following keys:
413
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
414
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
415
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
416
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
417
+ # trigger a retry.
352
418
  #
353
419
  # @return [Google::Cloud::Spanner::Results] The results of the read
354
420
  # operation.
@@ -367,25 +433,28 @@ module Google
367
433
  # end
368
434
  #
369
435
  def read table, columns, keys: nil, index: nil, limit: nil,
370
- transaction: nil, partition_token: nil
436
+ transaction: nil, partition_token: nil, call_options: nil
371
437
  ensure_service!
372
438
 
373
439
  results = Results.read service, path, table, columns,
374
440
  keys: keys, index: index, limit: limit,
375
441
  transaction: transaction,
376
- partition_token: partition_token
442
+ partition_token: partition_token,
443
+ call_options: call_options
377
444
  @last_updated_at = Time.now
378
445
  results
379
446
  end
380
447
 
381
448
  def partition_query sql, transaction, params: nil, types: nil,
382
- partition_size_bytes: nil, max_partitions: nil
449
+ partition_size_bytes: nil, max_partitions: nil,
450
+ call_options: nil
383
451
  ensure_service!
384
452
 
385
453
  results = service.partition_query \
386
454
  path, sql, transaction, params: params, types: types,
387
455
  partition_size_bytes: partition_size_bytes,
388
- max_partitions: max_partitions
456
+ max_partitions: max_partitions,
457
+ call_options: call_options
389
458
 
390
459
  @last_updated_at = Time.now
391
460
 
@@ -394,14 +463,15 @@ module Google
394
463
 
395
464
  def partition_read table, columns, transaction, keys: nil,
396
465
  index: nil, partition_size_bytes: nil,
397
- max_partitions: nil
466
+ max_partitions: nil, call_options: nil
398
467
  ensure_service!
399
468
 
400
469
  results = service.partition_read \
401
470
  path, table, columns, transaction,
402
471
  keys: keys, index: index,
403
472
  partition_size_bytes: partition_size_bytes,
404
- max_partitions: max_partitions
473
+ max_partitions: max_partitions,
474
+ call_options: call_options
405
475
 
406
476
  @last_updated_at = Time.now
407
477
 
@@ -414,6 +484,20 @@ module Google
414
484
  # @param [String] transaction_id The identifier of previously-started
415
485
  # transaction to be used instead of starting a new transaction.
416
486
  # Optional.
487
+ # @param [Hash] call_options A hash of values to specify the custom
488
+ # call options, e.g., timeout, retries, etc. Call options are
489
+ # optional. The following settings can be provided:
490
+ #
491
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
492
+ # that overrides the default setting.
493
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
494
+ # setting of retry policy with the following keys:
495
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
496
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
497
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
498
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
499
+ # trigger a retry.
500
+ #
417
501
  # @yield [commit] The block for mutating the data.
418
502
  # @yieldparam [Google::Cloud::Spanner::Commit] commit The Commit object.
419
503
  #
@@ -431,12 +515,13 @@ module Google
431
515
  # c.insert "users", [{ id: 2, name: "Harvey", active: true }]
432
516
  # end
433
517
  #
434
- def commit transaction_id: nil
518
+ def commit transaction_id: nil, call_options: nil
435
519
  ensure_service!
436
520
  commit = Commit.new
437
521
  yield commit
438
522
  commit_resp = service.commit path, commit.mutations,
439
- transaction_id: transaction_id
523
+ transaction_id: transaction_id,
524
+ call_options: call_options
440
525
  @last_updated_at = Time.now
441
526
  Convert.timestamp_to_time commit_resp.commit_timestamp
442
527
  end
@@ -467,6 +552,19 @@ module Google
467
552
  #
468
553
  # See [Data
469
554
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
555
+ # @param [Hash] call_options A hash of values to specify the custom
556
+ # call options, e.g., timeout, retries, etc. Call options are
557
+ # optional. The following settings can be provided:
558
+ #
559
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
560
+ # that overrides the default setting.
561
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
562
+ # setting of retry policy with the following keys:
563
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
564
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
565
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
566
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
567
+ # trigger a retry.
470
568
  #
471
569
  # @return [Time] The timestamp at which the operation committed.
472
570
  #
@@ -480,8 +578,9 @@ module Google
480
578
  # db.upsert "users", [{ id: 1, name: "Charlie", active: false },
481
579
  # { id: 2, name: "Harvey", active: true }]
482
580
  #
483
- def upsert table, *rows, transaction_id: nil
484
- commit transaction_id: transaction_id do |c|
581
+ def upsert table, *rows, transaction_id: nil, call_options: nil
582
+ opts = { transaction_id: transaction_id, call_options: call_options }
583
+ commit opts do |c|
485
584
  c.upsert table, rows
486
585
  end
487
586
  end
@@ -512,6 +611,19 @@ module Google
512
611
  #
513
612
  # See [Data
514
613
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
614
+ # @param [Hash] call_options A hash of values to specify the custom
615
+ # call options, e.g., timeout, retries, etc. Call options are
616
+ # optional. The following settings can be provided:
617
+ #
618
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
619
+ # that overrides the default setting.
620
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
621
+ # setting of retry policy with the following keys:
622
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
623
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
624
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
625
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
626
+ # trigger a retry.
515
627
  #
516
628
  # @return [Time] The timestamp at which the operation committed.
517
629
  #
@@ -525,8 +637,9 @@ module Google
525
637
  # db.insert "users", [{ id: 1, name: "Charlie", active: false },
526
638
  # { id: 2, name: "Harvey", active: true }]
527
639
  #
528
- def insert table, *rows, transaction_id: nil
529
- commit transaction_id: transaction_id do |c|
640
+ def insert table, *rows, transaction_id: nil, call_options: nil
641
+ opts = { transaction_id: transaction_id, call_options: call_options }
642
+ commit opts do |c|
530
643
  c.insert table, rows
531
644
  end
532
645
  end
@@ -556,6 +669,19 @@ module Google
556
669
  #
557
670
  # See [Data
558
671
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
672
+ # @param [Hash] call_options A hash of values to specify the custom
673
+ # call options, e.g., timeout, retries, etc. Call options are
674
+ # optional. The following settings can be provided:
675
+ #
676
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
677
+ # that overrides the default setting.
678
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
679
+ # setting of retry policy with the following keys:
680
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
681
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
682
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
683
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
684
+ # trigger a retry.
559
685
  #
560
686
  # @return [Time] The timestamp at which the operation committed.
561
687
  #
@@ -569,8 +695,9 @@ module Google
569
695
  # db.update "users", [{ id: 1, name: "Charlie", active: false },
570
696
  # { id: 2, name: "Harvey", active: true }]
571
697
  #
572
- def update table, *rows, transaction_id: nil
573
- commit transaction_id: transaction_id do |c|
698
+ def update table, *rows, transaction_id: nil, call_options: nil
699
+ opts = { transaction_id: transaction_id, call_options: call_options }
700
+ commit opts do |c|
574
701
  c.update table, rows
575
702
  end
576
703
  end
@@ -602,6 +729,19 @@ module Google
602
729
  #
603
730
  # See [Data
604
731
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
732
+ # @param [Hash] call_options A hash of values to specify the custom
733
+ # call options, e.g., timeout, retries, etc. Call options are
734
+ # optional. The following settings can be provided:
735
+ #
736
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
737
+ # that overrides the default setting.
738
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
739
+ # setting of retry policy with the following keys:
740
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
741
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
742
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
743
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
744
+ # trigger a retry.
605
745
  #
606
746
  # @return [Time] The timestamp at which the operation committed.
607
747
  #
@@ -615,8 +755,9 @@ module Google
615
755
  # db.replace "users", [{ id: 1, name: "Charlie", active: false },
616
756
  # { id: 2, name: "Harvey", active: true }]
617
757
  #
618
- def replace table, *rows, transaction_id: nil
619
- commit transaction_id: transaction_id do |c|
758
+ def replace table, *rows, transaction_id: nil, call_options: nil
759
+ opts = { transaction_id: transaction_id, call_options: call_options }
760
+ commit opts do |c|
620
761
  c.replace table, rows
621
762
  end
622
763
  end
@@ -630,6 +771,19 @@ module Google
630
771
  # @param [Object, Array<Object>] keys A single, or list of keys or key
631
772
  # ranges to match returned data to. Values should have exactly as many
632
773
  # elements as there are columns in the primary key.
774
+ # @param [Hash] call_options A hash of values to specify the custom
775
+ # call options, e.g., timeout, retries, etc. Call options are
776
+ # optional. The following settings can be provided:
777
+ #
778
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
779
+ # that overrides the default setting.
780
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
781
+ # setting of retry policy with the following keys:
782
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
783
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
784
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
785
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
786
+ # trigger a retry.
633
787
  #
634
788
  # @return [Time] The timestamp at which the operation committed.
635
789
  #
@@ -642,8 +796,9 @@ module Google
642
796
  #
643
797
  # db.delete "users", [1, 2, 3]
644
798
  #
645
- def delete table, keys = [], transaction_id: nil
646
- commit transaction_id: transaction_id do |c|
799
+ def delete table, keys = [], transaction_id: nil, call_options: nil
800
+ opts = { transaction_id: transaction_id, call_options: call_options }
801
+ commit opts do |c|
647
802
  c.delete table, keys
648
803
  end
649
804
  end
@@ -675,8 +830,8 @@ module Google
675
830
  rescue Google::Cloud::NotFoundError
676
831
  labels = @grpc.labels.to_h unless @grpc.labels.to_h.empty?
677
832
  @grpc = service.create_session \
678
- Admin::Database::V1::DatabaseAdminClient.database_path(
679
- project_id, instance_id, database_id
833
+ V1::Spanner::Paths.database_path(
834
+ project: project_id, instance: instance_id, database: database_id
680
835
  ),
681
836
  labels: labels
682
837
  @last_updated_at = Time.now
@@ -693,8 +848,8 @@ module Google
693
848
  rescue Google::Cloud::NotFoundError
694
849
  labels = @grpc.labels.to_h unless @grpc.labels.to_h.empty?
695
850
  @grpc = service.create_session \
696
- Admin::Database::V1::DatabaseAdminClient.database_path(
697
- project_id, instance_id, database_id
851
+ V1::Spanner::Paths.database_path(
852
+ project: project_id, instance: instance_id, database: database_id
698
853
  ),
699
854
  labels: labels
700
855
  false
@@ -718,7 +873,7 @@ module Google
718
873
 
719
874
  ##
720
875
  # @private Creates a new Session instance from a
721
- # Google::Spanner::V1::Session.
876
+ # `Google::Cloud::Spanner::V1::Session`.
722
877
  def self.from_grpc grpc, service, query_options: nil
723
878
  new grpc, service, query_options: query_options
724
879
  end
@@ -125,6 +125,19 @@ module Google
125
125
  # * `:optimizer_version` (String) The version of optimizer to use.
126
126
  # Empty to use database default. "latest" to use the latest
127
127
  # available optimizer version.
128
+ # @param [Hash] call_options A hash of values to specify the custom
129
+ # call options, e.g., timeout, retries, etc. Call options are
130
+ # optional. The following settings can be provided:
131
+ #
132
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
133
+ # that overrides the default setting.
134
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
135
+ # setting of retry policy with the following keys:
136
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
137
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
138
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
139
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
140
+ # trigger a retry.
128
141
  #
129
142
  # @return [Google::Cloud::Spanner::Results] The results of the query
130
143
  # execution.
@@ -243,13 +256,39 @@ module Google
243
256
  # end
244
257
  # end
245
258
  #
246
- def execute_query sql, params: nil, types: nil, query_options: nil
259
+ # @example Query using custom timeout and retry policy:
260
+ # require "google/cloud/spanner"
261
+ #
262
+ # spanner = Google::Cloud::Spanner.new
263
+ # db = spanner.client "my-instance", "my-database"
264
+ #
265
+ # timeout = 30.0
266
+ # retry_policy = {
267
+ # initial_delay: 0.25,
268
+ # max_delay: 32.0,
269
+ # multiplier: 1.3,
270
+ # retry_codes: ["UNAVAILABLE"]
271
+ # }
272
+ # call_options = { timeout: timeout, retry_policy: retry_policy }
273
+ #
274
+ # db.snapshot do |snp|
275
+ # results = snp.execute_query \
276
+ # "SELECT * FROM users", call_options: call_options
277
+ #
278
+ # results.rows.each do |row|
279
+ # puts "User #{row[:id]} is #{row[:name]}"
280
+ # end
281
+ # end
282
+ #
283
+ def execute_query sql, params: nil, types: nil, query_options: nil,
284
+ call_options: nil
247
285
  ensure_session!
248
286
 
249
287
  params, types = Convert.to_input_params_and_types params, types
250
288
  session.execute_query sql, params: params, types: types,
251
289
  transaction: tx_selector,
252
- query_options: query_options
290
+ query_options: query_options,
291
+ call_options: call_options
253
292
  end
254
293
  alias execute execute_query
255
294
  alias query execute_query
@@ -271,6 +310,19 @@ module Google
271
310
  # Optional.
272
311
  # @param [Integer] limit If greater than zero, no more than this number
273
312
  # of rows will be returned. The default is no limit.
313
+ # @param [Hash] call_options A hash of values to specify the custom
314
+ # call options, e.g., timeout, retries, etc. Call options are
315
+ # optional. The following settings can be provided:
316
+ #
317
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
318
+ # that overrides the default setting.
319
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
320
+ # setting of retry policy with the following keys:
321
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
322
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
323
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
324
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
325
+ # trigger a retry.
274
326
  #
275
327
  # @return [Google::Cloud::Spanner::Results] The results of the read
276
328
  # operation.
@@ -289,14 +341,16 @@ module Google
289
341
  # end
290
342
  # end
291
343
  #
292
- def read table, columns, keys: nil, index: nil, limit: nil
344
+ def read table, columns, keys: nil, index: nil, limit: nil,
345
+ call_options: nil
293
346
  ensure_session!
294
347
 
295
348
  columns = Array(columns).map(&:to_s)
296
349
  keys = Convert.to_key_set keys
297
350
 
298
351
  session.read table, columns, keys: keys, index: index, limit: limit,
299
- transaction: tx_selector
352
+ transaction: tx_selector,
353
+ call_options: call_options
300
354
  end
301
355
 
302
356
  ##
@@ -414,7 +468,7 @@ module Google
414
468
 
415
469
  ##
416
470
  # @private Creates a new Snapshot instance from a
417
- # Google::Spanner::V1::Transaction.
471
+ # `Google::Cloud::Spanner::V1::Transaction`.
418
472
  def self.from_grpc grpc, session
419
473
  new.tap do |s|
420
474
  s.instance_variable_set :@grpc, grpc
@@ -427,7 +481,7 @@ module Google
427
481
  # The TransactionSelector to be used for queries
428
482
  def tx_selector
429
483
  return nil if transaction_id.nil?
430
- Google::Spanner::V1::TransactionSelector.new id: transaction_id
484
+ V1::TransactionSelector.new id: transaction_id
431
485
  end
432
486
 
433
487
  ##