google-cloud-spanner 2.18.1 → 2.19.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86e6ca163f96c37fa118d05ecf481289318c707f1de83ffb401c20b40afacb69
4
- data.tar.gz: 12cbaad3945956e2da31862d23d0ef66658539fc30daee432879650d2ab3d028
3
+ metadata.gz: 1cf89ec86ecf1bed2fcbec728dca49cb5b7b18c6b27b187289b80bc70cceab87
4
+ data.tar.gz: 862f6429db6150c4254005fca8e0697fcda4139a1ce837c0ed88eee82e3c24f2
5
5
  SHA512:
6
- metadata.gz: b866a7a87beb50165b5b1593a4e92a1e0a4684f7a5e7210647aae4ecbe05fcf9f61b1309b00d37deb94e592bc98e541ea1f1104e411a32f6ed9bc4bbde1ee624
7
- data.tar.gz: d8c40babae83b334f95e15ea242f7b1271ecf510cd19722619e759b2a3082df04400b1fc3e78f572a0708ecca76ee68a71192fab92a425d1c27f3c8d58a58aca
6
+ metadata.gz: 8d6a031a4a1af4aa914725f26fd3ff7921ab718f73df8774fd9aef5d7c419cd0d2733f5987e8d3afe54a3cb25e7bf31bf98579239fcdda4aa582ae872acea441
7
+ data.tar.gz: 247ad7856b80831eb5039b8eec87a409a8c88f825dd0c65eebae40ebf9c17814870a14bcbf6316211d53cc6d1b4232b8834629c74960d4ac21b6568cd00240a5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Release History
2
2
 
3
+ ### 2.19.1 (2024-01-24)
4
+
5
+ #### Bug Fixes
6
+
7
+ * Bump up minimum version of google-cloud-spanner-v1 to 0.19.0 ([#79](https://github.com/googleapis/ruby-spanner/issues/79))
8
+
9
+ ### 2.19.0 (2024-01-08)
10
+
11
+ #### Features
12
+
13
+ * Support directed read options ([#75](https://github.com/googleapis/ruby-spanner/issues/75))
14
+ #### Bug Fixes
15
+
16
+ * add empty string validation for emulator host ([#73](https://github.com/googleapis/ruby-spanner/issues/73))
17
+
3
18
  ### 2.18.1 (2023-09-19)
4
19
 
5
20
  #### Bug Fixes
@@ -66,12 +66,13 @@ module Google
66
66
  ##
67
67
  # @private Creates a new Spanner BatchClient instance.
68
68
  def initialize project, instance_id, database_id, session_labels: nil,
69
- query_options: nil
69
+ query_options: nil, directed_read_options: nil
70
70
  @project = project
71
71
  @instance_id = instance_id
72
72
  @database_id = database_id
73
73
  @session_labels = session_labels
74
74
  @query_options = query_options
75
+ @directed_read_options = directed_read_options
75
76
  end
76
77
 
77
78
  # The unique identifier for the project.
@@ -110,6 +111,13 @@ module Google
110
111
  @project.database instance_id, database_id
111
112
  end
112
113
 
114
+ # A hash of values to specify the custom directed read options for executing
115
+ # SQL query.
116
+ # @return [Hash]
117
+ def directed_read_options
118
+ @directed_read_options
119
+ end
120
+
113
121
  ##
114
122
  # Returns a {BatchSnapshot} context in which multiple reads and/or
115
123
  # queries can be performed. All reads/queries will use the same
@@ -190,7 +198,7 @@ module Google
190
198
  snp_session.path, strong: strong,
191
199
  timestamp: (timestamp || read_timestamp),
192
200
  staleness: (staleness || exact_staleness)
193
- BatchSnapshot.from_grpc snp_grpc, snp_session
201
+ BatchSnapshot.from_grpc snp_grpc, snp_session, directed_read_options: @directed_read_options
194
202
  end
195
203
 
196
204
  ##
@@ -65,11 +65,15 @@ module Google
65
65
  # @private The Session object.
66
66
  attr_reader :session
67
67
 
68
+ # @private Directed Read Options
69
+ attr_reader :directed_read_options
70
+
68
71
  ##
69
72
  # @private Creates a BatchSnapshot object.
70
- def initialize grpc, session
73
+ def initialize grpc, session, directed_read_options: nil
71
74
  @grpc = grpc
72
75
  @session = session
76
+ @directed_read_options = directed_read_options
73
77
  end
74
78
 
75
79
  ##
@@ -191,6 +195,20 @@ module Google
191
195
  # @param [Boolean] data_boost_enabled If this field is
192
196
  # set `true`, the request will be executed via offline access.
193
197
  # Defaults to `false`.
198
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
199
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
200
+ # or regions should be used for non-transactional reads or queries.
201
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
202
+ # The following settings can be provided:
203
+ #
204
+ # * `:exclude_replicas` (Hash)
205
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
206
+ # Spanner will not route requests to the replicas in this list.
207
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
208
+ # If auto_failover_disabled is set to true and
209
+ # all replicas are exhausted without finding a healthy replica,
210
+ # Spanner will wait for a replica in the list to become available,
211
+ # requests may fail due to DEADLINE_EXCEEDED errors.
194
212
  #
195
213
  # @return [Array<Google::Cloud::Spanner::Partition>] The partitions
196
214
  # created by the query partition.
@@ -214,7 +232,8 @@ module Google
214
232
  #
215
233
  def partition_query sql, params: nil, types: nil,
216
234
  partition_size_bytes: nil, max_partitions: nil,
217
- query_options: nil, call_options: nil, data_boost_enabled: false
235
+ query_options: nil, call_options: nil, data_boost_enabled: false,
236
+ directed_read_options: nil
218
237
  ensure_session!
219
238
 
220
239
  params, types = Convert.to_input_params_and_types params, types
@@ -235,7 +254,8 @@ module Google
235
254
  transaction: tx_selector,
236
255
  partition_token: grpc.partition_token,
237
256
  query_options: query_options,
238
- data_boost_enabled: data_boost_enabled
257
+ data_boost_enabled: data_boost_enabled,
258
+ directed_read_options: (directed_read_options || @directed_read_options)
239
259
  }.compact
240
260
  )
241
261
  Partition.from_execute_sql_grpc execute_sql_grpc
@@ -284,6 +304,20 @@ module Google
284
304
  # @param [Boolean] data_boost_enabled If this field is
285
305
  # set `true`, the request will be executed via offline access.
286
306
  # Defaults to `false`.
307
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
308
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
309
+ # or regions should be used for non-transactional reads or queries.
310
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
311
+ # The following settings can be provided:
312
+ #
313
+ # * `:exclude_replicas` (Hash)
314
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
315
+ # Spanner will not route requests to the replicas in this list.
316
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
317
+ # If auto_failover_disabled is set to true and
318
+ # all replicas are exhausted without finding a healthy replica,
319
+ # Spanner will wait for a replica in the list to become available,
320
+ # requests may fail due to DEADLINE_EXCEEDED errors.
287
321
  #
288
322
  # @return [Array<Google::Cloud::Spanner::Partition>] The partitions
289
323
  # created by the read partition.
@@ -305,7 +339,8 @@ module Google
305
339
  #
306
340
  def partition_read table, columns, keys: nil, index: nil,
307
341
  partition_size_bytes: nil, max_partitions: nil,
308
- call_options: nil, data_boost_enabled: false
342
+ call_options: nil, data_boost_enabled: false,
343
+ directed_read_options: nil
309
344
  ensure_session!
310
345
 
311
346
  columns = Array(columns).map(&:to_s)
@@ -329,7 +364,8 @@ module Google
329
364
  index: index,
330
365
  transaction: tx_selector,
331
366
  partition_token: grpc.partition_token,
332
- data_boost_enabled: data_boost_enabled
367
+ data_boost_enabled: data_boost_enabled,
368
+ directed_read_options: (directed_read_options || @directed_read_options)
333
369
  }.compact
334
370
  )
335
371
  Partition.from_read_grpc read_grpc
@@ -498,6 +534,20 @@ module Google
498
534
  # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
499
535
  # * `:retry_codes` (`Array<String>`) - The error codes that should
500
536
  # trigger a retry.
537
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
538
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
539
+ # or regions should be used for non-transactional reads or queries.
540
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
541
+ # The following settings can be provided:
542
+ #
543
+ # * `:exclude_replicas` (Hash)
544
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
545
+ # Spanner will not route requests to the replicas in this list.
546
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
547
+ # If auto_failover_disabled is set to true and
548
+ # all replicas are exhausted without finding a healthy replica,
549
+ # Spanner will wait for a replica in the list to become available,
550
+ # requests may fail due to DEADLINE_EXCEEDED errors.
501
551
  #
502
552
  # @return [Google::Cloud::Spanner::Results] The results of the query
503
553
  # execution.
@@ -645,7 +695,7 @@ module Google
645
695
  # end
646
696
  #
647
697
  def execute_query sql, params: nil, types: nil, query_options: nil,
648
- call_options: nil
698
+ call_options: nil, directed_read_options: nil
649
699
  ensure_session!
650
700
 
651
701
  params, types = Convert.to_input_params_and_types params, types
@@ -653,7 +703,8 @@ module Google
653
703
  session.execute_query sql, params: params, types: types,
654
704
  transaction: tx_selector,
655
705
  query_options: query_options,
656
- call_options: call_options
706
+ call_options: call_options,
707
+ directed_read_options: (directed_read_options || @directed_read_options)
657
708
  end
658
709
  alias execute execute_query
659
710
  alias query execute_query
@@ -688,6 +739,20 @@ module Google
688
739
  # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
689
740
  # * `:retry_codes` (`Array<String>`) - The error codes that should
690
741
  # trigger a retry.
742
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
743
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
744
+ # or regions should be used for non-transactional reads or queries.
745
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
746
+ # The following settings can be provided:
747
+ #
748
+ # * `:exclude_replicas` (Hash)
749
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
750
+ # Spanner will not route requests to the replicas in this list.
751
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
752
+ # If auto_failover_disabled is set to true and
753
+ # all replicas are exhausted without finding a healthy replica,
754
+ # Spanner will wait for a replica in the list to become available,
755
+ # requests may fail due to DEADLINE_EXCEEDED errors.
691
756
  #
692
757
  # @return [Google::Cloud::Spanner::Results] The results of the read
693
758
  # operation.
@@ -706,7 +771,7 @@ module Google
706
771
  # end
707
772
  #
708
773
  def read table, columns, keys: nil, index: nil, limit: nil,
709
- call_options: nil
774
+ call_options: nil, directed_read_options: nil
710
775
  ensure_session!
711
776
 
712
777
  columns = Array(columns).map(&:to_s)
@@ -714,7 +779,8 @@ module Google
714
779
 
715
780
  session.read table, columns, keys: keys, index: index, limit: limit,
716
781
  transaction: tx_selector,
717
- call_options: call_options
782
+ call_options: call_options,
783
+ directed_read_options: (directed_read_options || @directed_read_options)
718
784
  end
719
785
 
720
786
  ##
@@ -784,8 +850,8 @@ module Google
784
850
  ##
785
851
  # @private Creates a new BatchSnapshot instance from a
786
852
  # `Google::Cloud::Spanner::V1::Transaction`.
787
- def self.from_grpc grpc, session
788
- new grpc, session
853
+ def self.from_grpc grpc, session, directed_read_options: nil
854
+ new grpc, session, directed_read_options: directed_read_options
789
855
  end
790
856
 
791
857
  protected
@@ -813,7 +879,8 @@ module Google
813
879
  partition_token: partition.execute.partition_token,
814
880
  query_options: query_options,
815
881
  call_options: call_options,
816
- data_boost_enabled: partition.execute.data_boost_enabled
882
+ data_boost_enabled: partition.execute.data_boost_enabled,
883
+ directed_read_options: partition.execute.directed_read_options
817
884
  end
818
885
 
819
886
  def execute_partition_read partition, call_options: nil
@@ -824,7 +891,8 @@ module Google
824
891
  transaction: partition.read.transaction,
825
892
  partition_token: partition.read.partition_token,
826
893
  call_options: call_options,
827
- data_boost_enabled: partition.read.data_boost_enabled
894
+ data_boost_enabled: partition.read.data_boost_enabled,
895
+ directed_read_options: partition.read.directed_read_options
828
896
  end
829
897
  end
830
898
  end
@@ -56,12 +56,14 @@ module Google
56
56
  ##
57
57
  # @private Creates a new Spanner Client instance.
58
58
  def initialize project, instance_id, database_id, session_labels: nil,
59
- pool_opts: {}, query_options: nil, database_role: nil
59
+ pool_opts: {}, query_options: nil, database_role: nil,
60
+ directed_read_options: nil
60
61
  @project = project
61
62
  @instance_id = instance_id
62
63
  @database_id = database_id
63
64
  @database_role = database_role
64
65
  @session_labels = session_labels
66
+ @directed_read_options = directed_read_options
65
67
  @pool = Pool.new self, **pool_opts
66
68
  @query_options = query_options
67
69
  end
@@ -115,6 +117,13 @@ module Google
115
117
  @query_options
116
118
  end
117
119
 
120
+ # A hash of values to specify the custom directed read options for executing
121
+ # SQL query.
122
+ # @return [Hash]
123
+ def directed_read_options
124
+ @directed_read_options
125
+ end
126
+
118
127
  ##
119
128
  # Executes a SQL query.
120
129
  #
@@ -264,6 +273,20 @@ module Google
264
273
  # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
265
274
  # * `:retry_codes` (`Array<String>`) - The error codes that should
266
275
  # trigger a retry.
276
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
277
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
278
+ # or regions should be used for non-transactional reads or queries.
279
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
280
+ # The following settings can be provided:
281
+ #
282
+ # * `:exclude_replicas` (Hash)
283
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
284
+ # Spanner will not route requests to the replicas in this list.
285
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
286
+ # If auto_failover_disabled is set to true and
287
+ # all replicas are exhausted without finding a healthy replica,
288
+ # Spanner will wait for a replica in the list to become available,
289
+ # requests may fail due to DEADLINE_EXCEEDED errors.
267
290
  #
268
291
  # @return [Google::Cloud::Spanner::Results] The results of the query
269
292
  # execution.
@@ -435,7 +458,7 @@ module Google
435
458
  #
436
459
  def execute_query sql, params: nil, types: nil, single_use: nil,
437
460
  query_options: nil, request_options: nil,
438
- call_options: nil
461
+ call_options: nil, directed_read_options: nil
439
462
  validate_single_use_args! single_use
440
463
  ensure_service!
441
464
 
@@ -448,7 +471,7 @@ module Google
448
471
  results = session.execute_query \
449
472
  sql, params: params, types: types, transaction: single_use_tx,
450
473
  query_options: query_options, request_options: request_options,
451
- call_options: call_options
474
+ call_options: call_options, directed_read_options: (directed_read_options || @directed_read_options)
452
475
  end
453
476
  results
454
477
  end
@@ -828,6 +851,20 @@ module Google
828
851
  # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
829
852
  # * `:retry_codes` (`Array<String>`) - The error codes that should
830
853
  # trigger a retry.
854
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
855
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
856
+ # or regions should be used for non-transactional reads or queries.
857
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
858
+ # The following settings can be provided:
859
+ #
860
+ # * `:exclude_replicas` (Hash)
861
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
862
+ # Spanner will not route requests to the replicas in this list.
863
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
864
+ # If auto_failover_disabled is set to true
865
+ # and all replicas are exhausted without finding a healthy replica,
866
+ # Spanner will wait for a replica in the list to become available,
867
+ # requests may fail due to DEADLINE_EXCEEDED errors.
831
868
  #
832
869
  # @return [Google::Cloud::Spanner::Results] The results of the read.
833
870
  #
@@ -911,7 +948,8 @@ module Google
911
948
  # end
912
949
  #
913
950
  def read table, columns, keys: nil, index: nil, limit: nil,
914
- single_use: nil, request_options: nil, call_options: nil
951
+ single_use: nil, request_options: nil, call_options: nil,
952
+ directed_read_options: nil
915
953
  validate_single_use_args! single_use
916
954
  ensure_service!
917
955
 
@@ -927,7 +965,8 @@ module Google
927
965
  table, columns, keys: keys, index: index, limit: limit,
928
966
  transaction: single_use_tx,
929
967
  request_options: request_options,
930
- call_options: call_options
968
+ call_options: call_options,
969
+ directed_read_options: (directed_read_options || @directed_read_options)
931
970
  end
932
971
  results
933
972
  end
@@ -1935,7 +1974,7 @@ module Google
1935
1974
  staleness: (staleness || exact_staleness),
1936
1975
  call_options: call_options
1937
1976
  Thread.current[IS_TRANSACTION_RUNNING_KEY] = true
1938
- snp = Snapshot.from_grpc snp_grpc, session
1977
+ snp = Snapshot.from_grpc snp_grpc, session, @directed_read_options
1939
1978
  yield snp if block_given?
1940
1979
  ensure
1941
1980
  Thread.current[IS_TRANSACTION_RUNNING_KEY] = nil
@@ -2159,7 +2198,9 @@ module Google
2159
2198
  session_count,
2160
2199
  labels: @session_labels,
2161
2200
  database_role: @database_role
2162
- resp.session.map { |grpc| Session.from_grpc grpc, @project.service, query_options: @query_options }
2201
+ resp.session.map do |grpc|
2202
+ Session.from_grpc grpc, @project.service, query_options: @query_options
2203
+ end
2163
2204
  end
2164
2205
 
2165
2206
  # @private
@@ -547,6 +547,20 @@ module Google
547
547
  # available optimizer version.
548
548
  # * `:optimizer_statistics_package` (String) Statistics package to
549
549
  # use. Empty to use the database default.
550
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
551
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
552
+ # or regions should be used for non-transactional reads or queries.
553
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
554
+ # The following settings can be provided:
555
+ #
556
+ # * `:exclude_replicas` (Hash)
557
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
558
+ # Spanner will not route requests to the replicas in this list.
559
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
560
+ # If auto_failover_disabled is set to true
561
+ # and all replicas are exhausted without finding a healthy replica,
562
+ # Spanner will wait for a replica in the list to become available,
563
+ # requests may fail due to DEADLINE_EXCEEDED errors.
550
564
  #
551
565
  # @return [Client] The newly created client.
552
566
  #
@@ -566,7 +580,7 @@ module Google
566
580
  # end
567
581
  #
568
582
  def client instance_id, database_id, pool: {}, labels: nil,
569
- query_options: nil, database_role: nil
583
+ query_options: nil, database_role: nil, directed_read_options: nil
570
584
  # Convert from possible Google::Protobuf::Map
571
585
  labels = labels.to_h { |k, v| [String(k), String(v)] } if labels
572
586
  # Configs set by environment variables take over client-level configs.
@@ -579,7 +593,8 @@ module Google
579
593
  session_labels: labels,
580
594
  pool_opts: valid_session_pool_options(pool),
581
595
  query_options: query_options,
582
- database_role: database_role
596
+ database_role: database_role,
597
+ directed_read_options: directed_read_options
583
598
  end
584
599
 
585
600
  ##
@@ -614,6 +629,20 @@ module Google
614
629
  # available optimizer version.
615
630
  # * `:optimizer_statistics_package` (String) Statistics package to
616
631
  # use. Empty to use the database default.
632
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
633
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
634
+ # or regions should be used for non-transactional reads or queries.
635
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
636
+ # The following settings can be provided:
637
+ #
638
+ # * `:exclude_replicas` (Hash)
639
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
640
+ # Spanner will not route requests to the replicas in this list.
641
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
642
+ # If auto_failover_disabled is set to true
643
+ # and all replicas are exhausted without finding a healthy replica,
644
+ # Spanner will wait for a replica in the list to become available,
645
+ # requests may fail due to DEADLINE_EXCEEDED errors.
617
646
  #
618
647
  # @return [Client] The newly created client.
619
648
  #
@@ -643,11 +672,11 @@ module Google
643
672
  # new_partition
644
673
  #
645
674
  def batch_client instance_id, database_id, labels: nil,
646
- query_options: nil
675
+ query_options: nil, directed_read_options: nil
647
676
  # Convert from possible Google::Protobuf::Map
648
677
  labels = labels.to_h { |k, v| [String(k), String(v)] } if labels
649
678
  BatchClient.new self, instance_id, database_id, session_labels: labels,
650
- query_options: query_options
679
+ query_options: query_options, directed_read_options: directed_read_options
651
680
  end
652
681
 
653
682
  protected
@@ -329,7 +329,8 @@ module Google
329
329
  params: nil, types: nil, resume_token: nil,
330
330
  partition_token: nil, seqno: nil,
331
331
  query_options: nil, request_options: nil,
332
- call_options: nil, data_boost_enabled: nil
332
+ call_options: nil, data_boost_enabled: nil,
333
+ directed_read_options: nil
333
334
  opts = default_options session_name: session_name,
334
335
  call_options: call_options
335
336
  request = {
@@ -342,7 +343,8 @@ module Google
342
343
  partition_token: partition_token,
343
344
  seqno: seqno,
344
345
  query_options: query_options,
345
- request_options: request_options
346
+ request_options: request_options,
347
+ directed_read_options: directed_read_options
346
348
  }
347
349
  request[:data_boost_enabled] = data_boost_enabled unless data_boost_enabled.nil?
348
350
  service.execute_streaming_sql request, opts
@@ -367,7 +369,7 @@ module Google
367
369
  index: nil, transaction: nil, limit: nil,
368
370
  resume_token: nil, partition_token: nil,
369
371
  request_options: nil, call_options: nil,
370
- data_boost_enabled: nil
372
+ data_boost_enabled: nil, directed_read_options: nil
371
373
  opts = default_options session_name: session_name,
372
374
  call_options: call_options
373
375
  request = {
@@ -377,6 +379,7 @@ module Google
377
379
  partition_token: partition_token, request_options: request_options
378
380
  }
379
381
  request[:data_boost_enabled] = data_boost_enabled unless data_boost_enabled.nil?
382
+ request[:directed_read_options] = directed_read_options unless directed_read_options.nil?
380
383
  service.streaming_read request, opts
381
384
  end
382
385
 
@@ -338,13 +338,10 @@ module Google
338
338
  #
339
339
  def execute_query sql, params: nil, types: nil, transaction: nil,
340
340
  partition_token: nil, seqno: nil, query_options: nil,
341
- request_options: nil, call_options: nil, data_boost_enabled: nil
341
+ request_options: nil, call_options: nil, data_boost_enabled: nil,
342
+ directed_read_options: nil
342
343
  ensure_service!
343
- if query_options.nil?
344
- query_options = @query_options
345
- else
346
- query_options = @query_options.merge query_options unless @query_options.nil?
347
- end
344
+ query_options = merge_if_present query_options, @query_options
348
345
 
349
346
  execute_query_options = {
350
347
  transaction: transaction, params: params, types: types,
@@ -353,6 +350,7 @@ module Google
353
350
  call_options: call_options
354
351
  }
355
352
  execute_query_options[:data_boost_enabled] = data_boost_enabled unless data_boost_enabled.nil?
353
+ execute_query_options[:directed_read_options] = directed_read_options unless directed_read_options.nil?
356
354
 
357
355
  response = service.execute_streaming_sql path, sql, **execute_query_options
358
356
 
@@ -499,7 +497,7 @@ module Google
499
497
  #
500
498
  def read table, columns, keys: nil, index: nil, limit: nil,
501
499
  transaction: nil, partition_token: nil, request_options: nil,
502
- call_options: nil, data_boost_enabled: nil
500
+ call_options: nil, data_boost_enabled: nil, directed_read_options: nil
503
501
  ensure_service!
504
502
 
505
503
  read_options = {
@@ -507,10 +505,10 @@ module Google
507
505
  transaction: transaction,
508
506
  partition_token: partition_token,
509
507
  request_options: request_options,
510
- call_options: call_options,
511
- data_boost_enabled: data_boost_enabled
508
+ call_options: call_options
512
509
  }
513
510
  read_options[:data_boost_enabled] = data_boost_enabled unless data_boost_enabled.nil?
511
+ read_options[:directed_read_options] = directed_read_options unless directed_read_options.nil?
514
512
 
515
513
  response = service.streaming_read_table \
516
514
  path, table, columns, **read_options
@@ -1265,6 +1263,14 @@ module Google
1265
1263
  def ensure_service!
1266
1264
  raise "Must have active connection to service" unless service
1267
1265
  end
1266
+
1267
+ def merge_if_present hash, hash_to_merge
1268
+ if hash.nil?
1269
+ hash_to_merge
1270
+ else
1271
+ hash_to_merge.nil? ? hash : hash_to_merge.merge(hash)
1272
+ end
1273
+ end
1268
1274
  end
1269
1275
  end
1270
1276
  end
@@ -142,6 +142,20 @@ module Google
142
142
  # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
143
143
  # * `:retry_codes` (`Array<String>`) - The error codes that should
144
144
  # trigger a retry.
145
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
146
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
147
+ # or regions should be used for non-transactional reads or queries.
148
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
149
+ # The following settings can be provided:
150
+ #
151
+ # * `:exclude_replicas` (Hash)
152
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
153
+ # Spanner will not route requests to the replicas in this list.
154
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
155
+ # If auto_failover_disabled is set to true
156
+ # and all replicas are exhausted without finding a healthy replica,
157
+ # Spanner will wait for a replica in the list to become available,
158
+ # requests may fail due to DEADLINE_EXCEEDED errors.
145
159
  #
146
160
  # @return [Google::Cloud::Spanner::Results] The results of the query
147
161
  # execution.
@@ -288,14 +302,15 @@ module Google
288
302
  # end
289
303
  #
290
304
  def execute_query sql, params: nil, types: nil, query_options: nil,
291
- call_options: nil
305
+ call_options: nil, directed_read_options: nil
292
306
  ensure_session!
293
307
 
294
308
  params, types = Convert.to_input_params_and_types params, types
295
309
  session.execute_query sql, params: params, types: types,
296
310
  transaction: tx_selector,
297
311
  query_options: query_options,
298
- call_options: call_options
312
+ call_options: call_options,
313
+ directed_read_options: (directed_read_options || @directed_read_options)
299
314
  end
300
315
  alias execute execute_query
301
316
  alias query execute_query
@@ -330,6 +345,20 @@ module Google
330
345
  # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
331
346
  # * `:retry_codes` (`Array<String>`) - The error codes that should
332
347
  # trigger a retry.
348
+ # @param [Hash] directed_read_options Client options used to set the directed_read_options
349
+ # for all ReadRequests and ExecuteSqlRequests that indicates which replicas
350
+ # or regions should be used for non-transactional reads or queries.
351
+ # Will represent [`Google::Cloud::Spanner::V1::DirectedReadOptions`](https://cloud.google.com/ruby/docs/reference/google-cloud-spanner-v1/latest/Google-Cloud-Spanner-V1-DirectedReadOptions)
352
+ # The following settings can be provided:
353
+ #
354
+ # * `:exclude_replicas` (Hash)
355
+ # Exclude_replicas indicates what replicas should be excluded from serving requests.
356
+ # Spanner will not route requests to the replicas in this list.
357
+ # * `:include_replicas` (Hash) Include_replicas indicates the order of replicas to process the request.
358
+ # If auto_failover_disabled is set to true
359
+ # and all replicas are exhausted without finding a healthy replica,
360
+ # Spanner will wait for a replica in the list to become available,
361
+ # requests may fail due to DEADLINE_EXCEEDED errors.
333
362
  #
334
363
  # @return [Google::Cloud::Spanner::Results] The results of the read
335
364
  # operation.
@@ -349,7 +378,7 @@ module Google
349
378
  # end
350
379
  #
351
380
  def read table, columns, keys: nil, index: nil, limit: nil,
352
- call_options: nil
381
+ call_options: nil, directed_read_options: nil
353
382
  ensure_session!
354
383
 
355
384
  columns = Array(columns).map(&:to_s)
@@ -357,7 +386,8 @@ module Google
357
386
 
358
387
  session.read table, columns, keys: keys, index: index, limit: limit,
359
388
  transaction: tx_selector,
360
- call_options: call_options
389
+ call_options: call_options,
390
+ directed_read_options: (directed_read_options || @directed_read_options)
361
391
  end
362
392
 
363
393
  ##
@@ -477,10 +507,11 @@ module Google
477
507
  ##
478
508
  # @private Creates a new Snapshot instance from a
479
509
  # `Google::Cloud::Spanner::V1::Transaction`.
480
- def self.from_grpc grpc, session
510
+ def self.from_grpc grpc, session, directed_read_options
481
511
  new.tap do |s|
482
512
  s.instance_variable_set :@grpc, grpc
483
513
  s.instance_variable_set :@session, session
514
+ s.instance_variable_set :@directed_read_options, directed_read_options
484
515
  end
485
516
  end
486
517
 
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Spanner
19
- VERSION = "2.18.1".freeze
19
+ VERSION = "2.19.1".freeze
20
20
  end
21
21
  end
22
22
  end
@@ -96,7 +96,7 @@ module Google
96
96
  project_id ||= project || default_project_id
97
97
  scope ||= configure.scope
98
98
  timeout ||= configure.timeout
99
- emulator_host ||= configure.emulator_host
99
+ emulator_host = present_or_nil(emulator_host) || present_or_nil(configure.emulator_host)
100
100
  endpoint ||= emulator_host || configure.endpoint
101
101
  credentials ||= keyfile
102
102
  lib_name ||= configure.lib_name
@@ -181,6 +181,13 @@ module Google
181
181
  Google::Cloud.configure.credentials ||
182
182
  Spanner::Credentials.default(scope: scope)
183
183
  end
184
+
185
+ ##
186
+ # @private checks if string is not nil or empty string
187
+ # returns the string if present else nil
188
+ def self.present_or_nil str
189
+ str.to_s.strip.empty? ? nil : str
190
+ end
184
191
  end
185
192
  end
186
193
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-spanner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.18.1
4
+ version: 2.19.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-09-19 00:00:00.000000000 Z
12
+ date: 2024-01-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core
@@ -348,7 +348,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
348
348
  - !ruby/object:Gem::Version
349
349
  version: '0'
350
350
  requirements: []
351
- rubygems_version: 3.4.19
351
+ rubygems_version: 3.5.3
352
352
  signing_key:
353
353
  specification_version: 4
354
354
  summary: API Client library for Google Cloud Spanner API