google-cloud-spanner 2.22.0 → 2.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/google/cloud/spanner/admin/database.rb +9 -11
- data/lib/google/cloud/spanner/admin/instance.rb +9 -11
- data/lib/google/cloud/spanner/backup/job/list.rb +1 -2
- data/lib/google/cloud/spanner/backup/job.rb +1 -2
- data/lib/google/cloud/spanner/backup/list.rb +1 -3
- data/lib/google/cloud/spanner/backup/restore/job.rb +1 -2
- data/lib/google/cloud/spanner/batch_snapshot.rb +6 -5
- data/lib/google/cloud/spanner/batch_update.rb +1 -2
- data/lib/google/cloud/spanner/batch_write.rb +72 -0
- data/lib/google/cloud/spanner/batch_write_results.rb +142 -0
- data/lib/google/cloud/spanner/client.rb +232 -24
- data/lib/google/cloud/spanner/database/job/list.rb +1 -2
- data/lib/google/cloud/spanner/database/job.rb +1 -2
- data/lib/google/cloud/spanner/database/list.rb +2 -3
- data/lib/google/cloud/spanner/instance/config/list.rb +2 -3
- data/lib/google/cloud/spanner/instance/job.rb +2 -3
- data/lib/google/cloud/spanner/instance/list.rb +2 -3
- data/lib/google/cloud/spanner/lar_headers.rb +4 -0
- data/lib/google/cloud/spanner/mutation_group.rb +288 -0
- data/lib/google/cloud/spanner/project.rb +9 -27
- data/lib/google/cloud/spanner/service.rb +32 -6
- data/lib/google/cloud/spanner/session.rb +161 -17
- data/lib/google/cloud/spanner/transaction.rb +9 -3
- data/lib/google/cloud/spanner/version.rb +1 -1
- metadata +32 -15
@@ -0,0 +1,288 @@
|
|
1
|
+
# Copyright 2024 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Google
|
16
|
+
module Cloud
|
17
|
+
module Spanner
|
18
|
+
##
|
19
|
+
# Part of the BatchWrite DSL. This object defines a group of mutations
|
20
|
+
# to be included in a BatchWrite operation. All writes within a mutation
|
21
|
+
# group will execute atomically at a single logical point in time across
|
22
|
+
# columns, rows, and tables in a database.
|
23
|
+
#
|
24
|
+
# All changes are accumulated in memory until the block passed to
|
25
|
+
# {Client#batch_write} completes.
|
26
|
+
#
|
27
|
+
# @example
|
28
|
+
# require "google/cloud/spanner"
|
29
|
+
#
|
30
|
+
# spanner = Google::Cloud::Spanner.new
|
31
|
+
#
|
32
|
+
# db = spanner.client "my-instance", "my-database"
|
33
|
+
#
|
34
|
+
# results = db.batch_write do |b|
|
35
|
+
# # First mutation group
|
36
|
+
# b.mutation_group do |mg|
|
37
|
+
# mg.upsert "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# # Second mutation group
|
41
|
+
# b.mutation_group do |mg|
|
42
|
+
# mg.upsert "Singers", [{ SingerId: 17, FirstName: "Catalina", LastName: "Smith" }]
|
43
|
+
# mg.update "Albums", [{ SingerId: 17, AlbumId: 1, AlbumTitle: "Go Go Go" }]
|
44
|
+
# end
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
class MutationGroup
|
48
|
+
# @private
|
49
|
+
def initialize
|
50
|
+
@commit = Commit.new
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# Inserts or updates rows in a table. If any of the rows already exist,
|
55
|
+
# then its column values are overwritten with the ones provided. Any
|
56
|
+
# column values not explicitly written are preserved.
|
57
|
+
#
|
58
|
+
# All changes are accumulated in memory until the block passed to
|
59
|
+
# {Client#batch_write} completes.
|
60
|
+
#
|
61
|
+
# @param [String] table The name of the table in the database to be
|
62
|
+
# modified.
|
63
|
+
# @param [Array<Hash>] rows One or more hash objects with the hash keys
|
64
|
+
# matching the table's columns, and the hash values matching the
|
65
|
+
# table's values.
|
66
|
+
#
|
67
|
+
# Ruby types are mapped to Spanner types as follows:
|
68
|
+
#
|
69
|
+
# | Spanner | Ruby | Notes |
|
70
|
+
# |-------------|----------------|---|
|
71
|
+
# | `BOOL` | `true`/`false` | |
|
72
|
+
# | `INT64` | `Integer` | |
|
73
|
+
# | `FLOAT64` | `Float` | |
|
74
|
+
# | `FLOAT32` | `Float` | |
|
75
|
+
# | `NUMERIC` | `BigDecimal` | |
|
76
|
+
# | `STRING` | `String` | |
|
77
|
+
# | `DATE` | `Date` | |
|
78
|
+
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
79
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
80
|
+
# | `ARRAY` | `Array` | Nested arrays are not supported. |
|
81
|
+
#
|
82
|
+
# See [Data
|
83
|
+
# types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
|
84
|
+
#
|
85
|
+
# @example
|
86
|
+
# require "google/cloud/spanner"
|
87
|
+
#
|
88
|
+
# spanner = Google::Cloud::Spanner.new
|
89
|
+
#
|
90
|
+
# db = spanner.client "my-instance", "my-database"
|
91
|
+
#
|
92
|
+
# results = db.batch_write do |b|
|
93
|
+
# b.mutation_group do |mg|
|
94
|
+
# mg.upsert "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
|
95
|
+
# end
|
96
|
+
# end
|
97
|
+
#
|
98
|
+
def upsert table, *rows
|
99
|
+
@commit.upsert table, rows
|
100
|
+
end
|
101
|
+
alias save upsert
|
102
|
+
|
103
|
+
##
|
104
|
+
# Inserts new rows in a table. If any of the rows already exist, the
|
105
|
+
# write or request fails with error {Google::Cloud::AlreadyExistsError}.
|
106
|
+
#
|
107
|
+
# All changes are accumulated in memory until the block passed to
|
108
|
+
# {Client#batch_write} completes.
|
109
|
+
#
|
110
|
+
# @param [String] table The name of the table in the database to be
|
111
|
+
# modified.
|
112
|
+
# @param [Array<Hash>] rows One or more hash objects with the hash keys
|
113
|
+
# matching the table's columns, and the hash values matching the
|
114
|
+
# table's values.
|
115
|
+
#
|
116
|
+
# Ruby types are mapped to Spanner types as follows:
|
117
|
+
#
|
118
|
+
# | Spanner | Ruby | Notes |
|
119
|
+
# |-------------|----------------|---|
|
120
|
+
# | `BOOL` | `true`/`false` | |
|
121
|
+
# | `INT64` | `Integer` | |
|
122
|
+
# | `FLOAT64` | `Float` | |
|
123
|
+
# | `FLOAT32` | `Float` | |
|
124
|
+
# | `NUMERIC` | `BigDecimal` | |
|
125
|
+
# | `STRING` | `String` | |
|
126
|
+
# | `DATE` | `Date` | |
|
127
|
+
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
128
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
129
|
+
# | `ARRAY` | `Array` | Nested arrays are not supported. |
|
130
|
+
#
|
131
|
+
# See [Data
|
132
|
+
# types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
|
133
|
+
#
|
134
|
+
# @example
|
135
|
+
# require "google/cloud/spanner"
|
136
|
+
#
|
137
|
+
# spanner = Google::Cloud::Spanner.new
|
138
|
+
#
|
139
|
+
# db = spanner.client "my-instance", "my-database"
|
140
|
+
#
|
141
|
+
# results = db.batch_write do |b|
|
142
|
+
# b.mutation_group do |mg|
|
143
|
+
# mg.insert "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
|
144
|
+
# end
|
145
|
+
# end
|
146
|
+
#
|
147
|
+
def insert table, *rows
|
148
|
+
@commit.insert table, rows
|
149
|
+
end
|
150
|
+
|
151
|
+
##
|
152
|
+
# Updates existing rows in a table. If any of the rows does not already
|
153
|
+
# exist, the request fails with error {Google::Cloud::NotFoundError}.
|
154
|
+
#
|
155
|
+
# All changes are accumulated in memory until the block passed to
|
156
|
+
# {Client#batch_write} completes.
|
157
|
+
#
|
158
|
+
# @param [String] table The name of the table in the database to be
|
159
|
+
# modified.
|
160
|
+
# @param [Array<Hash>] rows One or more hash objects with the hash keys
|
161
|
+
# matching the table's columns, and the hash values matching the
|
162
|
+
# table's values.
|
163
|
+
#
|
164
|
+
# Ruby types are mapped to Spanner types as follows:
|
165
|
+
#
|
166
|
+
# | Spanner | Ruby | Notes |
|
167
|
+
# |-------------|----------------|---|
|
168
|
+
# | `BOOL` | `true`/`false` | |
|
169
|
+
# | `INT64` | `Integer` | |
|
170
|
+
# | `FLOAT64` | `Float` | |
|
171
|
+
# | `FLOAT32` | `Float` | |
|
172
|
+
# | `NUMERIC` | `BigDecimal` | |
|
173
|
+
# | `STRING` | `String` | |
|
174
|
+
# | `DATE` | `Date` | |
|
175
|
+
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
176
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
177
|
+
# | `ARRAY` | `Array` | Nested arrays are not supported. |
|
178
|
+
#
|
179
|
+
# See [Data
|
180
|
+
# types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
|
181
|
+
#
|
182
|
+
# @example
|
183
|
+
# require "google/cloud/spanner"
|
184
|
+
#
|
185
|
+
# spanner = Google::Cloud::Spanner.new
|
186
|
+
#
|
187
|
+
# db = spanner.client "my-instance", "my-database"
|
188
|
+
#
|
189
|
+
# results = db.batch_write do |b|
|
190
|
+
# b.mutation_group do |mg|
|
191
|
+
# mg.update "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
|
192
|
+
# end
|
193
|
+
# end
|
194
|
+
#
|
195
|
+
def update table, *rows
|
196
|
+
@commit.update table, rows
|
197
|
+
end
|
198
|
+
|
199
|
+
##
|
200
|
+
# Inserts or replaces rows in a table. If any of the rows already exist,
|
201
|
+
# it is deleted, and the column values provided are inserted instead.
|
202
|
+
# Unlike #upsert, this means any values not explicitly written become
|
203
|
+
# `NULL`.
|
204
|
+
#
|
205
|
+
# All changes are accumulated in memory until the block passed to
|
206
|
+
# {Client#batch_write} completes.
|
207
|
+
#
|
208
|
+
# @param [String] table The name of the table in the database to be
|
209
|
+
# modified.
|
210
|
+
# @param [Array<Hash>] rows One or more hash objects with the hash keys
|
211
|
+
# matching the table's columns, and the hash values matching the
|
212
|
+
# table's values.
|
213
|
+
#
|
214
|
+
# Ruby types are mapped to Spanner types as follows:
|
215
|
+
#
|
216
|
+
# | Spanner | Ruby | Notes |
|
217
|
+
# |-------------|----------------|---|
|
218
|
+
# | `BOOL` | `true`/`false` | |
|
219
|
+
# | `INT64` | `Integer` | |
|
220
|
+
# | `FLOAT64` | `Float` | |
|
221
|
+
# | `FLOAT32` | `Float` | |
|
222
|
+
# | `NUMERIC` | `BigDecimal` | |
|
223
|
+
# | `STRING` | `String` | |
|
224
|
+
# | `DATE` | `Date` | |
|
225
|
+
# | `TIMESTAMP` | `Time`, `DateTime` | |
|
226
|
+
# | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
|
227
|
+
# | `ARRAY` | `Array` | Nested arrays are not supported. |
|
228
|
+
#
|
229
|
+
# See [Data
|
230
|
+
# types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
|
231
|
+
#
|
232
|
+
# @example
|
233
|
+
# require "google/cloud/spanner"
|
234
|
+
#
|
235
|
+
# spanner = Google::Cloud::Spanner.new
|
236
|
+
#
|
237
|
+
# db = spanner.client "my-instance", "my-database"
|
238
|
+
#
|
239
|
+
# results = db.batch_write do |b|
|
240
|
+
# b.mutation_group do |mg|
|
241
|
+
# mg.replace "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
|
242
|
+
# end
|
243
|
+
# end
|
244
|
+
#
|
245
|
+
def replace table, *rows
|
246
|
+
@commit.replace table, rows
|
247
|
+
end
|
248
|
+
|
249
|
+
##
|
250
|
+
# Deletes rows from a table. Succeeds whether or not the specified rows
|
251
|
+
# were present.
|
252
|
+
#
|
253
|
+
# All changes are accumulated in memory until the block passed to
|
254
|
+
# {Client#batch_write} completes.
|
255
|
+
#
|
256
|
+
# @param [String] table The name of the table in the database to be
|
257
|
+
# modified.
|
258
|
+
# @param [Object, Array<Object>] keys A single, or list of keys or key
|
259
|
+
# ranges to match returned data to. Values should have exactly as many
|
260
|
+
# elements as there are columns in the primary key.
|
261
|
+
#
|
262
|
+
# @example
|
263
|
+
# require "google/cloud/spanner"
|
264
|
+
#
|
265
|
+
# spanner = Google::Cloud::Spanner.new
|
266
|
+
#
|
267
|
+
# db = spanner.client "my-instance", "my-database"
|
268
|
+
#
|
269
|
+
# results = db.batch_write do |b|
|
270
|
+
# b.mutation_group do |mg|
|
271
|
+
# mg.delete "Singers", [1, 2, 3]
|
272
|
+
# end
|
273
|
+
# end
|
274
|
+
#
|
275
|
+
def delete table, keys = []
|
276
|
+
@commit.delete table, keys
|
277
|
+
end
|
278
|
+
|
279
|
+
##
|
280
|
+
# @private
|
281
|
+
# All of the mutations created in the transaction block.
|
282
|
+
def mutations
|
283
|
+
@commit.mutations
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
@@ -106,9 +106,7 @@ module Google
|
|
106
106
|
# @return [Array<Google::Cloud::Spanner::Instance>] The list of
|
107
107
|
# instances. (See {Google::Cloud::Spanner::Instance::List})
|
108
108
|
#
|
109
|
-
# @deprecated Use
|
110
|
-
# {Google::Cloud::Spanner::Admin::Instance#instance_admin Client#list_instances}
|
111
|
-
# instead.
|
109
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Instance.instance_admin}.list_instances instead.
|
112
110
|
#
|
113
111
|
# @example
|
114
112
|
# require "google/cloud/spanner"
|
@@ -144,9 +142,7 @@ module Google
|
|
144
142
|
# @return [Google::Cloud::Spanner::Instance, nil] The instance, or `nil`
|
145
143
|
# if the instance does not exist.
|
146
144
|
#
|
147
|
-
# @deprecated Use
|
148
|
-
# {Google::Cloud::Spanner::Admin::Instance#instance_admin Client#get_instance}
|
149
|
-
# instead.
|
145
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Instance.instance_admin}.get_instance instead.
|
150
146
|
#
|
151
147
|
# @example
|
152
148
|
# require "google/cloud/spanner"
|
@@ -208,9 +204,7 @@ module Google
|
|
208
204
|
# asynchronous processing of an instance create operation.
|
209
205
|
# @raise [ArgumentError] if both processing_units or nodes are specified.
|
210
206
|
#
|
211
|
-
# @deprecated Use
|
212
|
-
# {Google::Cloud::Spanner::Admin::Instance#instance_admin Client#create_instance}
|
213
|
-
# instead.
|
207
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Instance.instance_admin}.create_instance instead.
|
214
208
|
#
|
215
209
|
# @example
|
216
210
|
# require "google/cloud/spanner"
|
@@ -278,9 +272,7 @@ module Google
|
|
278
272
|
# instance configurations. (See
|
279
273
|
# {Google::Cloud::Spanner::Instance::Config::List})
|
280
274
|
#
|
281
|
-
# @deprecated Use
|
282
|
-
# {Google::Cloud::Spanner::Admin::Instance#instance_admin Client#list_instance_configs}
|
283
|
-
# instead.
|
275
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Instance.instance_admin}.list_instance_configs instead.
|
284
276
|
#
|
285
277
|
# @example
|
286
278
|
# require "google/cloud/spanner"
|
@@ -319,9 +311,7 @@ module Google
|
|
319
311
|
# configuration, or `nil` if the instance configuration does not
|
320
312
|
# exist.
|
321
313
|
#
|
322
|
-
# @deprecated Use
|
323
|
-
# {Google::Cloud::Spanner::Admin::Instance#instance_admin Client#get_instance_config}
|
324
|
-
# instead.
|
314
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Instance.instance_admin}.get_instance_config instead.
|
325
315
|
#
|
326
316
|
# @example
|
327
317
|
# require "google/cloud/spanner"
|
@@ -355,9 +345,7 @@ module Google
|
|
355
345
|
# @return [Array<Google::Cloud::Spanner::Database>] The list of
|
356
346
|
# databases. (See {Google::Cloud::Spanner::Database::List})
|
357
347
|
#
|
358
|
-
# @deprecated Use
|
359
|
-
# {Google::Cloud::Spanner::Admin::Database#database_admin Client#list_databases}
|
360
|
-
# instead.
|
348
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Database.database_admin}.list_databases instead.
|
361
349
|
#
|
362
350
|
# @example
|
363
351
|
# require "google/cloud/spanner"
|
@@ -394,9 +382,7 @@ module Google
|
|
394
382
|
# @return [Google::Cloud::Spanner::Database, nil] The database, or `nil`
|
395
383
|
# if the database does not exist.
|
396
384
|
#
|
397
|
-
# @deprecated Use
|
398
|
-
# {Google::Cloud::Spanner::Admin::Database#database_admin Client#get_database}
|
399
|
-
# instead.
|
385
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Database.database_admin}.get_database instead.
|
400
386
|
#
|
401
387
|
# @example
|
402
388
|
# require "google/cloud/spanner"
|
@@ -445,9 +431,7 @@ module Google
|
|
445
431
|
# @return [Database::Job] The job representing the long-running,
|
446
432
|
# asynchronous processing of a database create operation.
|
447
433
|
#
|
448
|
-
# @deprecated Use
|
449
|
-
# {Google::Cloud::Spanner::Admin::Database#database_admin Client#create_database}
|
450
|
-
# instead.
|
434
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Database.database_admin}.create_database instead.
|
451
435
|
#
|
452
436
|
# @example
|
453
437
|
# require "google/cloud/spanner"
|
@@ -688,9 +672,7 @@ module Google
|
|
688
672
|
raise "Must have active connection to service" unless service
|
689
673
|
end
|
690
674
|
|
691
|
-
# @deprecated Use
|
692
|
-
# {Google::Cloud::Spanner::Admin::Database#database_admin Client#database_path}
|
693
|
-
# instead.
|
675
|
+
# @deprecated Use {Google::Cloud::Spanner::Admin::Database.database_admin}.database_path instead.
|
694
676
|
def database_path instance_id, database_id
|
695
677
|
Admin::Database::V1::DatabaseAdminClient.database_path(
|
696
678
|
project, instance_id, database_id
|
@@ -435,13 +435,15 @@ module Google
|
|
435
435
|
service.partition_query request, opts
|
436
436
|
end
|
437
437
|
|
438
|
-
def commit session_name, mutations = [],
|
438
|
+
def commit session_name, mutations = [],
|
439
|
+
transaction_id: nil, exclude_txn_from_change_streams: false,
|
439
440
|
commit_options: nil, request_options: nil, call_options: nil
|
440
441
|
route_to_leader = LARHeaders.commit
|
441
442
|
tx_opts = nil
|
442
443
|
if transaction_id.nil?
|
443
444
|
tx_opts = V1::TransactionOptions.new(
|
444
|
-
read_write: V1::TransactionOptions::ReadWrite.new
|
445
|
+
read_write: V1::TransactionOptions::ReadWrite.new,
|
446
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams
|
445
447
|
)
|
446
448
|
end
|
447
449
|
opts = default_options session_name: session_name,
|
@@ -482,11 +484,14 @@ module Google
|
|
482
484
|
service.rollback request, opts
|
483
485
|
end
|
484
486
|
|
485
|
-
def begin_transaction session_name,
|
487
|
+
def begin_transaction session_name,
|
488
|
+
exclude_txn_from_change_streams: false,
|
489
|
+
request_options: nil,
|
486
490
|
call_options: nil,
|
487
491
|
route_to_leader: nil
|
488
492
|
tx_opts = V1::TransactionOptions.new(
|
489
|
-
read_write: V1::TransactionOptions::ReadWrite.new
|
493
|
+
read_write: V1::TransactionOptions::ReadWrite.new,
|
494
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams
|
490
495
|
)
|
491
496
|
opts = default_options session_name: session_name,
|
492
497
|
call_options: call_options,
|
@@ -499,6 +504,24 @@ module Google
|
|
499
504
|
service.begin_transaction request, opts
|
500
505
|
end
|
501
506
|
|
507
|
+
def batch_write session_name,
|
508
|
+
mutation_groups,
|
509
|
+
exclude_txn_from_change_streams: false,
|
510
|
+
request_options: nil,
|
511
|
+
call_options: nil
|
512
|
+
route_to_leader = LARHeaders.batch_write
|
513
|
+
opts = default_options session_name: session_name,
|
514
|
+
call_options: call_options,
|
515
|
+
route_to_leader: route_to_leader
|
516
|
+
request = {
|
517
|
+
session: session_name,
|
518
|
+
request_options: request_options,
|
519
|
+
mutation_groups: mutation_groups,
|
520
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams
|
521
|
+
}
|
522
|
+
service.batch_write request, opts
|
523
|
+
end
|
524
|
+
|
502
525
|
def create_snapshot session_name, strong: nil, timestamp: nil,
|
503
526
|
staleness: nil, call_options: nil
|
504
527
|
tx_opts = V1::TransactionOptions.new(
|
@@ -517,9 +540,12 @@ module Google
|
|
517
540
|
service.begin_transaction request, opts
|
518
541
|
end
|
519
542
|
|
520
|
-
def create_pdml session_name,
|
543
|
+
def create_pdml session_name,
|
544
|
+
exclude_txn_from_change_streams: false,
|
545
|
+
call_options: nil
|
521
546
|
tx_opts = V1::TransactionOptions.new(
|
522
|
-
partitioned_dml: V1::TransactionOptions::PartitionedDml.new
|
547
|
+
partitioned_dml: V1::TransactionOptions::PartitionedDml.new,
|
548
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams
|
523
549
|
)
|
524
550
|
route_to_leader = LARHeaders.begin_transaction true
|
525
551
|
opts = default_options session_name: session_name,
|