google-cloud-spanner 2.0.0 → 2.5.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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +49 -0
  3. data/CONTRIBUTING.md +2 -2
  4. data/LOGGING.md +1 -1
  5. data/lib/google-cloud-spanner.rb +1 -0
  6. data/lib/google/cloud/spanner.rb +7 -5
  7. data/lib/google/cloud/spanner/backup.rb +10 -2
  8. data/lib/google/cloud/spanner/backup/job.rb +8 -8
  9. data/lib/google/cloud/spanner/backup/job/list.rb +2 -2
  10. data/lib/google/cloud/spanner/backup/list.rb +2 -2
  11. data/lib/google/cloud/spanner/batch_snapshot.rb +114 -15
  12. data/lib/google/cloud/spanner/batch_update.rb +3 -1
  13. data/lib/google/cloud/spanner/client.rb +413 -78
  14. data/lib/google/cloud/spanner/commit_response.rb +87 -0
  15. data/lib/google/cloud/spanner/commit_response/commit_stats.rb +51 -0
  16. data/lib/google/cloud/spanner/convert.rb +9 -0
  17. data/lib/google/cloud/spanner/data.rb +4 -5
  18. data/lib/google/cloud/spanner/database.rb +25 -3
  19. data/lib/google/cloud/spanner/database/backup_info.rb +12 -3
  20. data/lib/google/cloud/spanner/database/job/list.rb +2 -2
  21. data/lib/google/cloud/spanner/database/list.rb +4 -4
  22. data/lib/google/cloud/spanner/fields.rb +3 -2
  23. data/lib/google/cloud/spanner/instance/config/list.rb +4 -4
  24. data/lib/google/cloud/spanner/instance/list.rb +4 -4
  25. data/lib/google/cloud/spanner/partition.rb +4 -2
  26. data/lib/google/cloud/spanner/policy.rb +3 -2
  27. data/lib/google/cloud/spanner/pool.rb +10 -10
  28. data/lib/google/cloud/spanner/results.rb +105 -26
  29. data/lib/google/cloud/spanner/service.rb +218 -107
  30. data/lib/google/cloud/spanner/session.rb +361 -30
  31. data/lib/google/cloud/spanner/snapshot.rb +58 -4
  32. data/lib/google/cloud/spanner/status.rb +4 -1
  33. data/lib/google/cloud/spanner/transaction.rb +114 -8
  34. data/lib/google/cloud/spanner/version.rb +1 -1
  35. metadata +12 -10
@@ -16,6 +16,7 @@
16
16
  require "google/cloud/spanner/data"
17
17
  require "google/cloud/spanner/results"
18
18
  require "google/cloud/spanner/commit"
19
+ require "google/cloud/spanner/commit_response"
19
20
  require "google/cloud/spanner/batch_update"
20
21
 
21
22
  module Google
@@ -162,6 +163,19 @@ module Google
162
163
  # * `:optimizer_version` (String) The version of optimizer to use.
163
164
  # Empty to use database default. "latest" to use the latest
164
165
  # available optimizer version.
166
+ # @param [Hash] call_options A hash of values to specify the custom
167
+ # call options, e.g., timeout, retries, etc. Call options are
168
+ # optional. The following settings can be provided:
169
+ #
170
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
171
+ # that overrides the default setting.
172
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
173
+ # setting of retry policy with the following keys:
174
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
175
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
176
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
177
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
178
+ # trigger a retry.
165
179
  #
166
180
  # @return [Google::Cloud::Spanner::Results] The results of the query
167
181
  # execution.
@@ -275,8 +289,32 @@ module Google
275
289
  # puts "User #{row[:id]} is #{row[:name]}"
276
290
  # end
277
291
  #
292
+ # @example Query using custom timeout and retry policy:
293
+ # require "google/cloud/spanner"
294
+ #
295
+ # spanner = Google::Cloud::Spanner.new
296
+ #
297
+ # db = spanner.client "my-instance", "my-database"
298
+ #
299
+ # timeout = 30.0
300
+ # retry_policy = {
301
+ # initial_delay: 0.25,
302
+ # max_delay: 32.0,
303
+ # multiplier: 1.3,
304
+ # retry_codes: ["UNAVAILABLE"]
305
+ # }
306
+ # call_options = { timeout: timeout, retry_policy: retry_policy }
307
+ #
308
+ # results = db.execute_query \
309
+ # "SELECT * FROM users", call_options: call_options
310
+ #
311
+ # results.rows.each do |row|
312
+ # puts "User #{row[:id]} is #{row[:name]}"
313
+ # end
314
+ #
278
315
  def execute_query sql, params: nil, types: nil, transaction: nil,
279
- partition_token: nil, seqno: nil, query_options: nil
316
+ partition_token: nil, seqno: nil, query_options: nil,
317
+ call_options: nil
280
318
  ensure_service!
281
319
  if query_options.nil?
282
320
  query_options = @query_options
@@ -289,7 +327,8 @@ module Google
289
327
  transaction: transaction,
290
328
  partition_token: partition_token,
291
329
  seqno: seqno,
292
- query_options: query_options
330
+ query_options: query_options,
331
+ call_options: call_options
293
332
  @last_updated_at = Time.now
294
333
  results
295
334
  end
@@ -302,6 +341,20 @@ module Google
302
341
  # transactions.
303
342
  # @param [Integer] seqno A per-transaction sequence number used to
304
343
  # identify this request.
344
+ # @param [Hash] call_options A hash of values to specify the custom
345
+ # call options, e.g., timeout, retries, etc. Call options are
346
+ # optional. The following settings can be provided:
347
+ #
348
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
349
+ # that overrides the default setting.
350
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
351
+ # setting of retry policy with the following keys:
352
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
353
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
354
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
355
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
356
+ # trigger a retry.
357
+ #
305
358
  # @yield [batch_update] a batch update object
306
359
  # @yieldparam [Google::Cloud::Spanner::BatchUpdate] batch_update a batch
307
360
  # update object accepting DML statements and optional parameters and
@@ -316,7 +369,7 @@ module Google
316
369
  # @return [Array<Integer>] A list with the exact number of rows that
317
370
  # were modified for each DML statement.
318
371
  #
319
- def batch_update transaction, seqno
372
+ def batch_update transaction, seqno, call_options: nil
320
373
  ensure_service!
321
374
 
322
375
  raise ArgumentError, "block is required" unless block_given?
@@ -325,7 +378,8 @@ module Google
325
378
  yield batch
326
379
 
327
380
  results = service.execute_batch_dml path, transaction,
328
- batch.statements, seqno
381
+ batch.statements, seqno,
382
+ call_options: call_options
329
383
  @last_updated_at = Time.now
330
384
  results
331
385
  end
@@ -349,6 +403,19 @@ module Google
349
403
  # @param [Google::Cloud::Spanner::V1::TransactionSelector] transaction The
350
404
  # transaction selector value to send. Only used for single-use
351
405
  # transactions.
406
+ # @param [Hash] call_options A hash of values to specify the custom
407
+ # call options, e.g., timeout, retries, etc. Call options are
408
+ # optional. The following settings can be provided:
409
+ #
410
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
411
+ # that overrides the default setting.
412
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
413
+ # setting of retry policy with the following keys:
414
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
415
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
416
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
417
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
418
+ # trigger a retry.
352
419
  #
353
420
  # @return [Google::Cloud::Spanner::Results] The results of the read
354
421
  # operation.
@@ -367,25 +434,28 @@ module Google
367
434
  # end
368
435
  #
369
436
  def read table, columns, keys: nil, index: nil, limit: nil,
370
- transaction: nil, partition_token: nil
437
+ transaction: nil, partition_token: nil, call_options: nil
371
438
  ensure_service!
372
439
 
373
440
  results = Results.read service, path, table, columns,
374
441
  keys: keys, index: index, limit: limit,
375
442
  transaction: transaction,
376
- partition_token: partition_token
443
+ partition_token: partition_token,
444
+ call_options: call_options
377
445
  @last_updated_at = Time.now
378
446
  results
379
447
  end
380
448
 
381
449
  def partition_query sql, transaction, params: nil, types: nil,
382
- partition_size_bytes: nil, max_partitions: nil
450
+ partition_size_bytes: nil, max_partitions: nil,
451
+ call_options: nil
383
452
  ensure_service!
384
453
 
385
454
  results = service.partition_query \
386
455
  path, sql, transaction, params: params, types: types,
387
456
  partition_size_bytes: partition_size_bytes,
388
- max_partitions: max_partitions
457
+ max_partitions: max_partitions,
458
+ call_options: call_options
389
459
 
390
460
  @last_updated_at = Time.now
391
461
 
@@ -394,14 +464,15 @@ module Google
394
464
 
395
465
  def partition_read table, columns, transaction, keys: nil,
396
466
  index: nil, partition_size_bytes: nil,
397
- max_partitions: nil
467
+ max_partitions: nil, call_options: nil
398
468
  ensure_service!
399
469
 
400
470
  results = service.partition_read \
401
471
  path, table, columns, transaction,
402
472
  keys: keys, index: index,
403
473
  partition_size_bytes: partition_size_bytes,
404
- max_partitions: max_partitions
474
+ max_partitions: max_partitions,
475
+ call_options: call_options
405
476
 
406
477
  @last_updated_at = Time.now
407
478
 
@@ -414,10 +485,34 @@ module Google
414
485
  # @param [String] transaction_id The identifier of previously-started
415
486
  # transaction to be used instead of starting a new transaction.
416
487
  # Optional.
488
+ # @param [Hash] commit_options A hash of commit options.
489
+ # e.g., return_commit_stats. Commit options are optional.
490
+ # The following options can be provided:
491
+ #
492
+ # * `:return_commit_stats` (Boolean) A boolean value. If `true`,
493
+ # then statistics related to the transaction will be included in
494
+ # {CommitResponse}. Default value is `false`
495
+ #
496
+ # transaction. Default it is `false`.
497
+ # @param [Hash] call_options A hash of values to specify the custom
498
+ # call options, e.g., timeout, retries, etc. Call options are
499
+ # optional. The following settings can be provided:
500
+ #
501
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
502
+ # that overrides the default setting.
503
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
504
+ # setting of retry policy with the following keys:
505
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
506
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
507
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
508
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
509
+ # trigger a retry.
510
+ #
417
511
  # @yield [commit] The block for mutating the data.
418
512
  # @yieldparam [Google::Cloud::Spanner::Commit] commit The Commit object.
419
513
  #
420
- # @return [Time] The timestamp at which the operation committed.
514
+ # @return [Time, CommitResponse] The timestamp at which the operation
515
+ # committed. If commit options are set it returns {CommitResponse}.
421
516
  #
422
517
  # @example
423
518
  # require "google/cloud/spanner"
@@ -431,14 +526,33 @@ module Google
431
526
  # c.insert "users", [{ id: 2, name: "Harvey", active: true }]
432
527
  # end
433
528
  #
434
- def commit transaction_id: nil
529
+ # @example Get commit stats
530
+ # require "google/cloud/spanner"
531
+ #
532
+ # spanner = Google::Cloud::Spanner.new
533
+ #
534
+ # db = spanner.client "my-instance", "my-database"
535
+ #
536
+ # commit_options = { return_commit_stats: true }
537
+ # commit_resp = db.commit commit_options: commit_options do |c|
538
+ # c.update "users", [{ id: 1, name: "Charlie", active: false }]
539
+ # c.insert "users", [{ id: 2, name: "Harvey", active: true }]
540
+ # end
541
+ #
542
+ # puts commit_resp.timestamp
543
+ # puts commit_resp.stats.mutation_count
544
+ #
545
+ def commit transaction_id: nil, commit_options: nil, call_options: nil
435
546
  ensure_service!
436
547
  commit = Commit.new
437
548
  yield commit
438
549
  commit_resp = service.commit path, commit.mutations,
439
- transaction_id: transaction_id
550
+ transaction_id: transaction_id,
551
+ commit_options: commit_options,
552
+ call_options: call_options
440
553
  @last_updated_at = Time.now
441
- Convert.timestamp_to_time commit_resp.commit_timestamp
554
+ resp = CommitResponse.from_grpc commit_resp
555
+ commit_options ? resp : resp.timestamp
442
556
  end
443
557
 
444
558
  ##
@@ -468,7 +582,30 @@ module Google
468
582
  # See [Data
469
583
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
470
584
  #
471
- # @return [Time] The timestamp at which the operation committed.
585
+ # @param [Hash] commit_options A hash of commit options.
586
+ # e.g., return_commit_stats. Commit options are optional.
587
+ # The following options can be provided:
588
+ #
589
+ # * `:return_commit_stats` (Boolean) A boolean value. If `true`,
590
+ # then statistics related to the transaction will be included in
591
+ # {CommitResponse}. Default value is `false`
592
+ #
593
+ # @param [Hash] call_options A hash of values to specify the custom
594
+ # call options, e.g., timeout, retries, etc. Call options are
595
+ # optional. The following settings can be provided:
596
+ #
597
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
598
+ # that overrides the default setting.
599
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
600
+ # setting of retry policy with the following keys:
601
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
602
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
603
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
604
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
605
+ # trigger a retry.
606
+ #
607
+ # @return [Time, CommitResponse] The timestamp at which the operation
608
+ # committed. If commit options are set it returns {CommitResponse}.
472
609
  #
473
610
  # @example
474
611
  # require "google/cloud/spanner"
@@ -480,8 +617,29 @@ module Google
480
617
  # db.upsert "users", [{ id: 1, name: "Charlie", active: false },
481
618
  # { id: 2, name: "Harvey", active: true }]
482
619
  #
483
- def upsert table, *rows, transaction_id: nil
484
- commit transaction_id: transaction_id do |c|
620
+ # @example Get commit stats
621
+ # require "google/cloud/spanner"
622
+ #
623
+ # spanner = Google::Cloud::Spanner.new
624
+ #
625
+ # db = spanner.client "my-instance", "my-database"
626
+ #
627
+ # records = [{ id: 1, name: "Charlie", active: false },
628
+ # { id: 2, name: "Harvey", active: true }]
629
+ # commit_options = { return_commit_stats: true }
630
+ # commit_resp = db.upsert "users", records, commit_options: commit_options
631
+ #
632
+ # puts commit_resp.timestamp
633
+ # puts commit_resp.stats.mutation_count
634
+ #
635
+ def upsert table, *rows, transaction_id: nil, commit_options: nil,
636
+ call_options: nil
637
+ opts = {
638
+ transaction_id: transaction_id,
639
+ commit_options: commit_options,
640
+ call_options: call_options
641
+ }
642
+ commit(**opts) do |c|
485
643
  c.upsert table, rows
486
644
  end
487
645
  end
@@ -513,7 +671,30 @@ module Google
513
671
  # See [Data
514
672
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
515
673
  #
516
- # @return [Time] The timestamp at which the operation committed.
674
+ # @param [Hash] commit_options A hash of commit options.
675
+ # e.g., return_commit_stats. Commit options are optional.
676
+ # The following options can be provided:
677
+ #
678
+ # * `:return_commit_stats` (Boolean) A boolean value. If `true`,
679
+ # then statistics related to the transaction will be included in
680
+ # {CommitResponse}. Default value is `false`
681
+ #
682
+ # @param [Hash] call_options A hash of values to specify the custom
683
+ # call options, e.g., timeout, retries, etc. Call options are
684
+ # optional. The following settings can be provided:
685
+ #
686
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
687
+ # that overrides the default setting.
688
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
689
+ # setting of retry policy with the following keys:
690
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
691
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
692
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
693
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
694
+ # trigger a retry.
695
+ #
696
+ # @return [Time, CommitResponse] The timestamp at which the operation
697
+ # committed. If commit options are set it returns {CommitResponse}.
517
698
  #
518
699
  # @example
519
700
  # require "google/cloud/spanner"
@@ -525,8 +706,29 @@ module Google
525
706
  # db.insert "users", [{ id: 1, name: "Charlie", active: false },
526
707
  # { id: 2, name: "Harvey", active: true }]
527
708
  #
528
- def insert table, *rows, transaction_id: nil
529
- commit transaction_id: transaction_id do |c|
709
+ # @example Get commit stats
710
+ # require "google/cloud/spanner"
711
+ #
712
+ # spanner = Google::Cloud::Spanner.new
713
+ #
714
+ # db = spanner.client "my-instance", "my-database"
715
+ #
716
+ # records = [{ id: 1, name: "Charlie", active: false },
717
+ # { id: 2, name: "Harvey", active: true }]
718
+ # commit_options = { return_commit_stats: true }
719
+ # commit_resp = db.insert "users", records, commit_options: commit_options
720
+ #
721
+ # puts commit_resp.timestamp
722
+ # puts commit_resp.stats.mutation_count
723
+ #
724
+ def insert table, *rows, transaction_id: nil, commit_options: nil,
725
+ call_options: nil
726
+ opts = {
727
+ transaction_id: transaction_id,
728
+ commit_options: commit_options,
729
+ call_options: call_options
730
+ }
731
+ commit(**opts) do |c|
530
732
  c.insert table, rows
531
733
  end
532
734
  end
@@ -557,7 +759,30 @@ module Google
557
759
  # See [Data
558
760
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
559
761
  #
560
- # @return [Time] The timestamp at which the operation committed.
762
+ # @param [Hash] commit_options A hash of commit options.
763
+ # e.g., return_commit_stats. Commit options are optional.
764
+ # The following options can be provided:
765
+ #
766
+ # * `:return_commit_stats` (Boolean) A boolean value. If `true`,
767
+ # then statistics related to the transaction will be included in
768
+ # {CommitResponse}. Default value is `false`
769
+ #
770
+ # @param [Hash] call_options A hash of values to specify the custom
771
+ # call options, e.g., timeout, retries, etc. Call options are
772
+ # optional. The following settings can be provided:
773
+ #
774
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
775
+ # that overrides the default setting.
776
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
777
+ # setting of retry policy with the following keys:
778
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
779
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
780
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
781
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
782
+ # trigger a retry.
783
+ #
784
+ # @return [Time, CommitResponse] The timestamp at which the operation
785
+ # committed. If commit options are set it returns {CommitResponse}.
561
786
  #
562
787
  # @example
563
788
  # require "google/cloud/spanner"
@@ -569,8 +794,29 @@ module Google
569
794
  # db.update "users", [{ id: 1, name: "Charlie", active: false },
570
795
  # { id: 2, name: "Harvey", active: true }]
571
796
  #
572
- def update table, *rows, transaction_id: nil
573
- commit transaction_id: transaction_id do |c|
797
+ # @example Get commit stats
798
+ # require "google/cloud/spanner"
799
+ #
800
+ # spanner = Google::Cloud::Spanner.new
801
+ #
802
+ # db = spanner.client "my-instance", "my-database"
803
+ #
804
+ # records = [{ id: 1, name: "Charlie", active: false },
805
+ # { id: 2, name: "Harvey", active: true }]
806
+ # commit_options = { return_commit_stats: true }
807
+ # commit_resp = db.update "users", records, commit_options: commit_options
808
+ #
809
+ # puts commit_resp.timestamp
810
+ # puts commit_resp.stats.mutation_count
811
+ #
812
+ def update table, *rows, transaction_id: nil, commit_options: nil,
813
+ call_options: nil
814
+ opts = {
815
+ transaction_id: transaction_id,
816
+ commit_options: commit_options,
817
+ call_options: call_options
818
+ }
819
+ commit(**opts) do |c|
574
820
  c.update table, rows
575
821
  end
576
822
  end
@@ -603,7 +849,30 @@ module Google
603
849
  # See [Data
604
850
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
605
851
  #
606
- # @return [Time] The timestamp at which the operation committed.
852
+ # @param [Hash] commit_options A hash of commit options.
853
+ # e.g., return_commit_stats. Commit options are optional.
854
+ # The following options can be provided:
855
+ #
856
+ # * `:return_commit_stats` (Boolean) A boolean value. If `true`,
857
+ # then statistics related to the transaction will be included in
858
+ # {CommitResponse}. Default value is `false`.
859
+ #
860
+ # @param [Hash] call_options A hash of values to specify the custom
861
+ # call options, e.g., timeout, retries, etc. Call options are
862
+ # optional. The following settings can be provided:
863
+ #
864
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
865
+ # that overrides the default setting.
866
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
867
+ # setting of retry policy with the following keys:
868
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
869
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
870
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
871
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
872
+ # trigger a retry.
873
+ #
874
+ # @return [Time, CommitResponse] The timestamp at which the operation
875
+ # committed. If commit options are set it returns {CommitResponse}.
607
876
  #
608
877
  # @example
609
878
  # require "google/cloud/spanner"
@@ -615,8 +884,29 @@ module Google
615
884
  # db.replace "users", [{ id: 1, name: "Charlie", active: false },
616
885
  # { id: 2, name: "Harvey", active: true }]
617
886
  #
618
- def replace table, *rows, transaction_id: nil
619
- commit transaction_id: transaction_id do |c|
887
+ # @example Get commit stats
888
+ # require "google/cloud/spanner"
889
+ #
890
+ # spanner = Google::Cloud::Spanner.new
891
+ #
892
+ # db = spanner.client "my-instance", "my-database"
893
+ #
894
+ # records = [{ id: 1, name: "Charlie", active: false },
895
+ # { id: 2, name: "Harvey", active: true }]
896
+ # commit_options = { return_commit_stats: true }
897
+ # commit_resp = db.replace "users", records, commit_options: commit_options
898
+ #
899
+ # puts commit_resp.timestamp
900
+ # puts commit_resp.stats.mutation_count
901
+ #
902
+ def replace table, *rows, transaction_id: nil, commit_options: nil,
903
+ call_options: nil
904
+ opts = {
905
+ transaction_id: transaction_id,
906
+ commit_options: commit_options,
907
+ call_options: call_options
908
+ }
909
+ commit(**opts) do |c|
620
910
  c.replace table, rows
621
911
  end
622
912
  end
@@ -630,8 +920,30 @@ module Google
630
920
  # @param [Object, Array<Object>] keys A single, or list of keys or key
631
921
  # ranges to match returned data to. Values should have exactly as many
632
922
  # elements as there are columns in the primary key.
633
- #
634
- # @return [Time] The timestamp at which the operation committed.
923
+ # @param [Hash] commit_options A hash of commit options.
924
+ # e.g., return_commit_stats. Commit options are optional.
925
+ # The following options can be provided:
926
+ #
927
+ # * `:return_commit_stats` (Boolean) A boolean value. If `true`,
928
+ # then statistics related to the transaction will be included in
929
+ # {CommitResponse}. Default value is `false`
930
+ #
931
+ # @param [Hash] call_options A hash of values to specify the custom
932
+ # call options, e.g., timeout, retries, etc. Call options are
933
+ # optional. The following settings can be provided:
934
+ #
935
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
936
+ # that overrides the default setting.
937
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
938
+ # setting of retry policy with the following keys:
939
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
940
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
941
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
942
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
943
+ # trigger a retry.
944
+ #
945
+ # @return [Time, CommitResponse] The timestamp at which the operation
946
+ # committed. If commit options are set it returns {CommitResponse}.
635
947
  #
636
948
  # @example
637
949
  # require "google/cloud/spanner"
@@ -642,8 +954,27 @@ module Google
642
954
  #
643
955
  # db.delete "users", [1, 2, 3]
644
956
  #
645
- def delete table, keys = [], transaction_id: nil
646
- commit transaction_id: transaction_id do |c|
957
+ # @example Get commit stats
958
+ # require "google/cloud/spanner"
959
+ #
960
+ # spanner = Google::Cloud::Spanner.new
961
+ #
962
+ # db = spanner.client "my-instance", "my-database"
963
+ #
964
+ # commit_options = { return_commit_stats: true }
965
+ # commit_resp = db.delete "users", [1,2,3], commit_options: commit_options
966
+ #
967
+ # puts commit_resp.timestamp
968
+ # puts commit_resp.stats.mutation_count
969
+ #
970
+ def delete table, keys = [], transaction_id: nil, commit_options: nil,
971
+ call_options: nil
972
+ opts = {
973
+ transaction_id: transaction_id,
974
+ commit_options: commit_options,
975
+ call_options: call_options
976
+ }
977
+ commit(**opts) do |c|
647
978
  c.delete table, keys
648
979
  end
649
980
  end