google-cloud-datastore 0.20.1 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -46,12 +46,13 @@ module Google
46
46
  # @return [String]
47
47
  #
48
48
  # @example
49
- # require "google/cloud"
49
+ # require "google/cloud/datastore"
50
50
  #
51
- # gcloud = Google::Cloud.new "my-todo-project",
52
- # "/path/to/keyfile.json"
51
+ # datastore = Google::Cloud::Datastore.new(
52
+ # project: "my-todo-project",
53
+ # keyfile: "/path/to/keyfile.json"
54
+ # )
53
55
  #
54
- # datastore = gcloud.datastore
55
56
  # task = datastore.find "Task", "sampleTask"
56
57
  # task.key.project #=> "my-todo-project"
57
58
  #
@@ -65,12 +66,13 @@ module Google
65
66
  # @return [String, nil]
66
67
  #
67
68
  # @example
68
- # require "google/cloud"
69
+ # require "google/cloud/datastore"
69
70
  #
70
- # gcloud = Google::Cloud.new "my-todo-project",
71
- # "/path/to/keyfile.json"
71
+ # datastore = Google::Cloud::Datastore.new(
72
+ # project: "my-todo-project",
73
+ # keyfile: "/path/to/keyfile.json"
74
+ # )
72
75
  #
73
- # datastore = gcloud.datastore
74
76
  # task = datastore.find "Task", "sampleTask"
75
77
  # task.key.namespace #=> "ns~todo-project"
76
78
  #
@@ -186,10 +188,9 @@ module Google
186
188
  # @return [Key, nil]
187
189
  #
188
190
  # @example
189
- # require "google/cloud"
191
+ # require "google/cloud/datastore"
190
192
  #
191
- # gcloud = Google::Cloud.new
192
- # datastore = gcloud.datastore
193
+ # datastore = Google::Cloud::Datastore.new
193
194
  #
194
195
  # task_list = datastore.find "TaskList", "default"
195
196
  # query = datastore.query("Task").
@@ -92,7 +92,7 @@ module Google
92
92
  # Ensures the key is the proper type,
93
93
  # otherwise a PropertyError is raised.
94
94
  def ensure_key_type key
95
- return key.to_str if key.respond_to? :to_str
95
+ return key.to_s if key.respond_to? :to_s
96
96
  fail "Property key #{key} must be a String."
97
97
  end
98
98
 
@@ -13,46 +13,55 @@
13
13
  # limitations under the License.
14
14
 
15
15
 
16
+ require "google/cloud/errors"
16
17
  require "google/cloud/datastore/credentials"
17
- require "google/datastore/v1/datastore_pb"
18
- require "google/cloud/core/grpc_backoff"
18
+ require "google/cloud/datastore/version"
19
+ require "google/cloud/datastore/v1"
20
+ require "google/gax/errors"
19
21
 
20
22
  module Google
21
23
  module Cloud
22
24
  module Datastore
23
25
  ##
24
- # @private Represents the gRPC Datastore service, including all the API
26
+ # @private Represents the GAX Datastore service, including all the API
25
27
  # methods.
26
28
  class Service
27
- attr_accessor :project, :credentials, :host, :retries, :timeout
29
+ attr_accessor :project, :credentials, :host, :timeout, :client_config
28
30
 
29
31
  ##
30
32
  # Creates a new Service instance.
31
- def initialize project, credentials, host: nil, retries: nil,
32
- timeout: nil
33
+ def initialize project, credentials, host: nil, timeout: nil,
34
+ client_config: nil
33
35
  @project = project
34
36
  @credentials = credentials
35
- @host = host || "datastore.googleapis.com"
36
- @retries = retries
37
+ @host = host || V1::DatastoreApi::SERVICE_ADDRESS
37
38
  @timeout = timeout
39
+ @client_config = client_config || {}
38
40
  end
39
41
 
40
- def creds
42
+ def channel
43
+ require "grpc"
44
+ GRPC::Core::Channel.new host, nil, chan_creds
45
+ end
46
+
47
+ def chan_creds
41
48
  return credentials if insecure?
49
+ require "grpc"
42
50
  GRPC::Core::ChannelCredentials.new.compose \
43
51
  GRPC::Core::CallCredentials.new credentials.client.updater_proc
44
52
  end
45
53
 
46
- def datastore
47
- return mocked_datastore if mocked_datastore
48
- @datastore ||= begin
49
- require "google/datastore/v1/datastore_services_pb"
50
-
51
- Google::Datastore::V1::Datastore::Stub.new(
52
- host, creds, timeout: timeout)
53
- end
54
+ def service
55
+ return mocked_service if mocked_service
56
+ @service ||= V1::DatastoreApi.new(
57
+ service_path: host,
58
+ channel: channel,
59
+ timeout: timeout,
60
+ client_config: client_config,
61
+ app_name: "gcloud-ruby",
62
+ app_version: Google::Cloud::Datastore::VERSION)
54
63
  end
55
- attr_accessor :mocked_datastore
64
+ attr_accessor :mocked_service
56
65
 
57
66
  def insecure?
58
67
  credentials == :this_channel_is_insecure
@@ -62,98 +71,72 @@ module Google
62
71
  # Allocate IDs for incomplete keys.
63
72
  # (This is useful for referencing an entity before it is inserted.)
64
73
  def allocate_ids *incomplete_keys
65
- allocate_req = Google::Datastore::V1::AllocateIdsRequest.new(
66
- project_id: project,
67
- keys: incomplete_keys
68
- )
69
-
70
- execute { datastore.allocate_ids allocate_req }
74
+ execute do
75
+ service.allocate_ids project, incomplete_keys,
76
+ options: default_options
77
+ end
71
78
  end
72
79
 
73
80
  ##
74
81
  # Look up entities by keys.
75
82
  def lookup *keys, consistency: nil, transaction: nil
76
- lookup_req = Google::Datastore::V1::LookupRequest.new(
77
- project_id: project,
78
- keys: keys
79
- )
80
- lookup_req.read_options = generate_read_options consistency,
81
- transaction
83
+ read_options = generate_read_options consistency, transaction
82
84
 
83
- execute { datastore.lookup lookup_req }
85
+ execute do
86
+ service.lookup project, read_options, keys, options: default_options
87
+ end
84
88
  end
85
89
 
86
90
  # Query for entities.
87
91
  def run_query query, namespace = nil, consistency: nil, transaction: nil
88
- run_req = Google::Datastore::V1::RunQueryRequest.new(
89
- project_id: project)
90
- if query.is_a? Google::Datastore::V1::Query
91
- run_req["query"] = query
92
- elsif query.is_a? Google::Datastore::V1::GqlQuery
93
- run_req["gql_query"] = query
94
- else
95
- fail ArgumentError, "Unable to query with a #{query.class} object."
92
+ gql_query = nil
93
+ if query.is_a? Google::Datastore::V1::GqlQuery
94
+ gql_query = query
95
+ query = nil
96
96
  end
97
- run_req.read_options = generate_read_options consistency, transaction
98
-
99
- run_req.partition_id = Google::Datastore::V1::PartitionId.new(
97
+ read_options = generate_read_options consistency, transaction
98
+ partition_id = Google::Datastore::V1::PartitionId.new(
100
99
  namespace_id: namespace) if namespace
101
100
 
102
- execute { datastore.run_query run_req }
101
+ execute do
102
+ service.run_query project,
103
+ partition_id,
104
+ read_options,
105
+ query: query,
106
+ gql_query: gql_query,
107
+ options: default_options
108
+ end
103
109
  end
104
110
 
105
111
  ##
106
112
  # Begin a new transaction.
107
113
  def begin_transaction
108
- tx_req = Google::Datastore::V1::BeginTransactionRequest.new(
109
- project_id: project
110
- )
111
-
112
- execute { datastore.begin_transaction tx_req }
114
+ execute { service.begin_transaction project }
113
115
  end
114
116
 
115
117
  ##
116
118
  # Commit a transaction, optionally creating, deleting or modifying
117
119
  # some entities.
118
120
  def commit mutations, transaction: nil
119
- commit_req = Google::Datastore::V1::CommitRequest.new(
120
- project_id: project,
121
- mode: :NON_TRANSACTIONAL,
122
- mutations: mutations
123
- )
124
- if transaction
125
- commit_req.mode = :TRANSACTIONAL
126
- commit_req.transaction = transaction
121
+ mode = transaction.nil? ? :NON_TRANSACTIONAL : :TRANSACTIONAL
122
+ execute do
123
+ service.commit project, mode, mutations, transaction: transaction,
124
+ options: default_options
127
125
  end
128
-
129
- execute { datastore.commit commit_req }
130
126
  end
131
127
 
132
128
  ##
133
129
  # Roll back a transaction.
134
130
  def rollback transaction
135
- rb_req = Google::Datastore::V1::RollbackRequest.new(
136
- project_id: project,
137
- transaction: transaction
138
- )
139
-
140
- execute { datastore.rollback rb_req }
131
+ execute do
132
+ service.rollback project, transaction, options: default_options
133
+ end
141
134
  end
142
135
 
143
136
  def inspect
144
137
  "#{self.class}(#{@project})"
145
138
  end
146
139
 
147
- ##
148
- # Performs backoff and error handling
149
- def execute
150
- Google::Cloud::Core::GrpcBackoff.new(retries: retries).execute do
151
- yield
152
- end
153
- rescue GRPC::BadStatus => e
154
- raise Google::Cloud::Error.from_error(e)
155
- end
156
-
157
140
  protected
158
141
 
159
142
  def generate_read_options consistency, transaction
@@ -169,6 +152,21 @@ module Google
169
152
  end
170
153
  nil
171
154
  end
155
+
156
+ def default_headers
157
+ { "google-cloud-resource-prefix" => "projects/#{@project}" }
158
+ end
159
+
160
+ def default_options
161
+ Google::Gax::CallOptions.new kwargs: default_headers
162
+ end
163
+
164
+ def execute
165
+ yield
166
+ rescue Google::Gax::GaxError => e
167
+ # GaxError wraps BadStatus, but exposes it as #cause
168
+ raise Google::Cloud::Error.from_error(e.cause)
169
+ end
172
170
  end
173
171
  end
174
172
  end
@@ -59,7 +59,7 @@ module Google
59
59
 
60
60
  ##
61
61
  # @private Creates a new Transaction instance.
62
- # Takes a Connection and Service instead of project and Credentials.
62
+ # Takes a Service instead of project and Credentials.
63
63
  def initialize service
64
64
  @service = service
65
65
  reset!
@@ -191,8 +191,7 @@ module Google
191
191
  # @return [Google::Cloud::Datastore::Dataset::LookupResults]
192
192
  #
193
193
  # @example
194
- # gcloud = Google::Cloud.new
195
- # datastore = gcloud.datastore
194
+ # datastore = Google::Cloud::Datastore.new
196
195
  # task_key1 = datastore.key "Task", 123456
197
196
  # task_key2 = datastore.key "Task", 987654
198
197
  # tasks = datastore.find_all task_key1, task_key2
@@ -259,10 +258,9 @@ module Google
259
258
  # @yieldparam [Commit] commit The object that changes are made on
260
259
  #
261
260
  # @example
262
- # require "google/cloud"
261
+ # require "google/cloud/datastore"
263
262
  #
264
- # gcloud = Google::Cloud.new
265
- # datastore = gcloud.datastore
263
+ # datastore = Google::Cloud::Datastore.new
266
264
  #
267
265
  # task = datastore.entity "Task" do |t|
268
266
  # t["type"] = "Personal"
@@ -282,10 +280,9 @@ module Google
282
280
  # end
283
281
  #
284
282
  # @example Commit can be passed a block, same as {Dataset#commit}:
285
- # require "google/cloud"
283
+ # require "google/cloud/datastore"
286
284
  #
287
- # gcloud = Google::Cloud.new
288
- # datastore = gcloud.datastore
285
+ # datastore = Google::Cloud::Datastore.new
289
286
  #
290
287
  # tx = datastore.transaction
291
288
  # begin
@@ -321,10 +318,9 @@ module Google
321
318
  # Rolls a transaction back.
322
319
  #
323
320
  # @example
324
- # require "google/cloud"
321
+ # require "google/cloud/datastore"
325
322
  #
326
- # gcloud = Google::Cloud.new
327
- # datastore = gcloud.datastore
323
+ # datastore = Google::Cloud::Datastore.new
328
324
  #
329
325
  # task = datastore.entity "Task" do |t|
330
326
  # t["type"] = "Personal"
@@ -0,0 +1,16 @@
1
+ # Copyright 2016 Google Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+
16
+ require "google/cloud/datastore/v1/datastore_api"
@@ -0,0 +1,396 @@
1
+ # Copyright 2016 Google Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # EDITING INSTRUCTIONS
16
+ # This file was generated from the file
17
+ # https://github.com/googleapis/googleapis/blob/master/google/datastore/v1/datastore.proto,
18
+ # and updates to that file get reflected here through a refresh process.
19
+ # For the short term, the refresh process will only be runnable by Google
20
+ # engineers.
21
+ #
22
+ # The only allowed edits are to method and file documentation. A 3-way
23
+ # merge preserves those additions if the generated source changes.
24
+
25
+ require "json"
26
+ require "pathname"
27
+
28
+ require "google/gax"
29
+ require "google/datastore/v1/datastore_pb"
30
+
31
+ module Google
32
+ module Cloud
33
+ module Datastore
34
+ module V1
35
+ # Each RPC normalizes the partition IDs of the keys in its input entities,
36
+ # and always returns entities with keys with normalized partition IDs.
37
+ # This applies to all keys and entities, including those in values, except keys
38
+ # with both an empty path and an empty or unset partition ID. Normalization of
39
+ # input keys sets the project ID (if not already set) to the project ID from
40
+ # the request.
41
+ #
42
+ # @!attribute [r] datastore_stub
43
+ # @return [Google::Datastore::V1::Datastore::Stub]
44
+ class DatastoreApi
45
+ attr_reader :datastore_stub
46
+
47
+ # The default address of the service.
48
+ SERVICE_ADDRESS = "datastore.googleapis.com".freeze
49
+
50
+ # The default port of the service.
51
+ DEFAULT_SERVICE_PORT = 443
52
+
53
+ CODE_GEN_NAME_VERSION = "gapic/0.1.0".freeze
54
+
55
+ DEFAULT_TIMEOUT = 30
56
+
57
+ # The scopes needed to make gRPC calls to all of the methods defined in
58
+ # this service.
59
+ ALL_SCOPES = [
60
+ "https://www.googleapis.com/auth/cloud-platform",
61
+ "https://www.googleapis.com/auth/datastore"
62
+ ].freeze
63
+
64
+ # @param service_path [String]
65
+ # The domain name of the API remote host.
66
+ # @param port [Integer]
67
+ # The port on which to connect to the remote host.
68
+ # @param channel [Channel]
69
+ # A Channel object through which to make calls.
70
+ # @param chan_creds [Grpc::ChannelCredentials]
71
+ # A ChannelCredentials for the setting up the RPC client.
72
+ # @param client_config[Hash]
73
+ # A Hash for call options for each method. See
74
+ # Google::Gax#construct_settings for the structure of
75
+ # this data. Falls back to the default config if not specified
76
+ # or the specified config is missing data points.
77
+ # @param timeout [Numeric]
78
+ # The default timeout, in seconds, for calls made through this client.
79
+ # @param app_name [String]
80
+ # The codename of the calling service.
81
+ # @param app_version [String]
82
+ # The version of the calling service.
83
+ def initialize \
84
+ service_path: SERVICE_ADDRESS,
85
+ port: DEFAULT_SERVICE_PORT,
86
+ channel: nil,
87
+ chan_creds: nil,
88
+ scopes: ALL_SCOPES,
89
+ client_config: {},
90
+ timeout: DEFAULT_TIMEOUT,
91
+ app_name: "gax",
92
+ app_version: Google::Gax::VERSION
93
+ # These require statements are intentionally placed here to initialize
94
+ # the gRPC module only when it's required.
95
+ # See https://github.com/googleapis/toolkit/issues/446
96
+ require "google/gax/grpc"
97
+ require "google/datastore/v1/datastore_services_pb"
98
+
99
+ google_api_client = "#{app_name}/#{app_version} " \
100
+ "#{CODE_GEN_NAME_VERSION} gax/#{Google::Gax::VERSION} " \
101
+ "ruby/#{RUBY_VERSION}".freeze
102
+ headers = { :"x-goog-api-client" => google_api_client }
103
+ client_config_file = Pathname.new(__dir__).join(
104
+ "datastore_client_config.json"
105
+ )
106
+ defaults = client_config_file.open do |f|
107
+ Google::Gax.construct_settings(
108
+ "google.datastore.v1.Datastore",
109
+ JSON.parse(f.read),
110
+ client_config,
111
+ Google::Gax::Grpc::STATUS_CODE_NAMES,
112
+ timeout,
113
+ errors: Google::Gax::Grpc::API_ERRORS,
114
+ kwargs: headers
115
+ )
116
+ end
117
+ @datastore_stub = Google::Gax::Grpc.create_stub(
118
+ service_path,
119
+ port,
120
+ chan_creds: chan_creds,
121
+ channel: channel,
122
+ scopes: scopes,
123
+ &Google::Datastore::V1::Datastore::Stub.method(:new)
124
+ )
125
+
126
+ @lookup = Google::Gax.create_api_call(
127
+ @datastore_stub.method(:lookup),
128
+ defaults["lookup"]
129
+ )
130
+ @run_query = Google::Gax.create_api_call(
131
+ @datastore_stub.method(:run_query),
132
+ defaults["run_query"]
133
+ )
134
+ @begin_transaction = Google::Gax.create_api_call(
135
+ @datastore_stub.method(:begin_transaction),
136
+ defaults["begin_transaction"]
137
+ )
138
+ @commit = Google::Gax.create_api_call(
139
+ @datastore_stub.method(:commit),
140
+ defaults["commit"]
141
+ )
142
+ @rollback = Google::Gax.create_api_call(
143
+ @datastore_stub.method(:rollback),
144
+ defaults["rollback"]
145
+ )
146
+ @allocate_ids = Google::Gax.create_api_call(
147
+ @datastore_stub.method(:allocate_ids),
148
+ defaults["allocate_ids"]
149
+ )
150
+ end
151
+
152
+ # Service calls
153
+
154
+ # Looks up entities by key.
155
+ #
156
+ # @param project_id [String]
157
+ # The ID of the project against which to make the request.
158
+ # @param read_options [Google::Datastore::V1::ReadOptions]
159
+ # The options for this lookup request.
160
+ # @param keys [Array<Google::Datastore::V1::Key>]
161
+ # Keys of entities to look up.
162
+ # @param options [Google::Gax::CallOptions]
163
+ # Overrides the default settings for this call, e.g, timeout,
164
+ # retries, etc.
165
+ # @return [Google::Datastore::V1::LookupResponse]
166
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
167
+ # @example
168
+ # require "google/cloud/datastore/v1/datastore_api"
169
+ #
170
+ # DatastoreApi = Google::Cloud::Datastore::V1::DatastoreApi
171
+ # ReadOptions = Google::Datastore::V1::ReadOptions
172
+ #
173
+ # datastore_api = DatastoreApi.new
174
+ # project_id = ''
175
+ # read_options = ReadOptions.new
176
+ # keys = []
177
+ # response = datastore_api.lookup(project_id, read_options, keys)
178
+
179
+ def lookup \
180
+ project_id,
181
+ read_options,
182
+ keys,
183
+ options: nil
184
+ req = Google::Datastore::V1::LookupRequest.new(
185
+ project_id: project_id,
186
+ read_options: read_options,
187
+ keys: keys
188
+ )
189
+ @lookup.call(req, options)
190
+ end
191
+
192
+ # Queries for entities.
193
+ #
194
+ # @param project_id [String]
195
+ # The ID of the project against which to make the request.
196
+ # @param partition_id [Google::Datastore::V1::PartitionId]
197
+ # Entities are partitioned into subsets, identified by a partition ID.
198
+ # Queries are scoped to a single partition.
199
+ # This partition ID is normalized with the standard default context
200
+ # partition ID.
201
+ # @param read_options [Google::Datastore::V1::ReadOptions]
202
+ # The options for this query.
203
+ # @param query [Google::Datastore::V1::Query]
204
+ # The query to run.
205
+ # @param gql_query [Google::Datastore::V1::GqlQuery]
206
+ # The GQL query to run.
207
+ # @param options [Google::Gax::CallOptions]
208
+ # Overrides the default settings for this call, e.g, timeout,
209
+ # retries, etc.
210
+ # @return [Google::Datastore::V1::RunQueryResponse]
211
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
212
+ # @example
213
+ # require "google/cloud/datastore/v1/datastore_api"
214
+ #
215
+ # DatastoreApi = Google::Cloud::Datastore::V1::DatastoreApi
216
+ # PartitionId = Google::Datastore::V1::PartitionId
217
+ # ReadOptions = Google::Datastore::V1::ReadOptions
218
+ #
219
+ # datastore_api = DatastoreApi.new
220
+ # project_id = ''
221
+ # partition_id = PartitionId.new
222
+ # read_options = ReadOptions.new
223
+ # response = datastore_api.run_query(project_id, partition_id, read_options)
224
+
225
+ def run_query \
226
+ project_id,
227
+ partition_id,
228
+ read_options,
229
+ query: nil,
230
+ gql_query: nil,
231
+ options: nil
232
+ req = Google::Datastore::V1::RunQueryRequest.new(
233
+ project_id: project_id,
234
+ partition_id: partition_id,
235
+ read_options: read_options
236
+ )
237
+ req.query = query unless query.nil?
238
+ req.gql_query = gql_query unless gql_query.nil?
239
+ @run_query.call(req, options)
240
+ end
241
+
242
+ # Begins a new transaction.
243
+ #
244
+ # @param project_id [String]
245
+ # The ID of the project against which to make the request.
246
+ # @param options [Google::Gax::CallOptions]
247
+ # Overrides the default settings for this call, e.g, timeout,
248
+ # retries, etc.
249
+ # @return [Google::Datastore::V1::BeginTransactionResponse]
250
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
251
+ # @example
252
+ # require "google/cloud/datastore/v1/datastore_api"
253
+ #
254
+ # DatastoreApi = Google::Cloud::Datastore::V1::DatastoreApi
255
+ #
256
+ # datastore_api = DatastoreApi.new
257
+ # project_id = ''
258
+ # response = datastore_api.begin_transaction(project_id)
259
+
260
+ def begin_transaction \
261
+ project_id,
262
+ options: nil
263
+ req = Google::Datastore::V1::BeginTransactionRequest.new(
264
+ project_id: project_id
265
+ )
266
+ @begin_transaction.call(req, options)
267
+ end
268
+
269
+ # Commits a transaction, optionally creating, deleting or modifying some
270
+ # entities.
271
+ #
272
+ # @param project_id [String]
273
+ # The ID of the project against which to make the request.
274
+ # @param mode [Google::Datastore::V1::CommitRequest::Mode]
275
+ # The type of commit to perform. Defaults to +TRANSACTIONAL+.
276
+ # @param transaction [String]
277
+ # The identifier of the transaction associated with the commit. A
278
+ # transaction identifier is returned by a call to
279
+ # Datastore::BeginTransaction.
280
+ # @param mutations [Array<Google::Datastore::V1::Mutation>]
281
+ # The mutations to perform.
282
+ #
283
+ # When mode is +TRANSACTIONAL+, mutations affecting a single entity are
284
+ # applied in order. The following sequences of mutations affecting a single
285
+ # entity are not permitted in a single +Commit+ request:
286
+ #
287
+ # - +insert+ followed by +insert+
288
+ # - +update+ followed by +insert+
289
+ # - +upsert+ followed by +insert+
290
+ # - +delete+ followed by +update+
291
+ #
292
+ # When mode is +NON_TRANSACTIONAL+, no two mutations may affect a single
293
+ # entity.
294
+ # @param options [Google::Gax::CallOptions]
295
+ # Overrides the default settings for this call, e.g, timeout,
296
+ # retries, etc.
297
+ # @return [Google::Datastore::V1::CommitResponse]
298
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
299
+ # @example
300
+ # require "google/cloud/datastore/v1/datastore_api"
301
+ #
302
+ # DatastoreApi = Google::Cloud::Datastore::V1::DatastoreApi
303
+ # Mode = Google::Datastore::V1::CommitRequest::Mode
304
+ #
305
+ # datastore_api = DatastoreApi.new
306
+ # project_id = ''
307
+ # mode = Mode::MODE_UNSPECIFIED
308
+ # mutations = []
309
+ # response = datastore_api.commit(project_id, mode, mutations)
310
+
311
+ def commit \
312
+ project_id,
313
+ mode,
314
+ mutations,
315
+ transaction: nil,
316
+ options: nil
317
+ req = Google::Datastore::V1::CommitRequest.new(
318
+ project_id: project_id,
319
+ mode: mode,
320
+ mutations: mutations
321
+ )
322
+ req.transaction = transaction unless transaction.nil?
323
+ @commit.call(req, options)
324
+ end
325
+
326
+ # Rolls back a transaction.
327
+ #
328
+ # @param project_id [String]
329
+ # The ID of the project against which to make the request.
330
+ # @param transaction [String]
331
+ # The transaction identifier, returned by a call to
332
+ # Datastore::BeginTransaction.
333
+ # @param options [Google::Gax::CallOptions]
334
+ # Overrides the default settings for this call, e.g, timeout,
335
+ # retries, etc.
336
+ # @return [Google::Datastore::V1::RollbackResponse]
337
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
338
+ # @example
339
+ # require "google/cloud/datastore/v1/datastore_api"
340
+ #
341
+ # DatastoreApi = Google::Cloud::Datastore::V1::DatastoreApi
342
+ #
343
+ # datastore_api = DatastoreApi.new
344
+ # project_id = ''
345
+ # transaction = ''
346
+ # response = datastore_api.rollback(project_id, transaction)
347
+
348
+ def rollback \
349
+ project_id,
350
+ transaction,
351
+ options: nil
352
+ req = Google::Datastore::V1::RollbackRequest.new(
353
+ project_id: project_id,
354
+ transaction: transaction
355
+ )
356
+ @rollback.call(req, options)
357
+ end
358
+
359
+ # Allocates IDs for the given keys, which is useful for referencing an entity
360
+ # before it is inserted.
361
+ #
362
+ # @param project_id [String]
363
+ # The ID of the project against which to make the request.
364
+ # @param keys [Array<Google::Datastore::V1::Key>]
365
+ # A list of keys with incomplete key paths for which to allocate IDs.
366
+ # No key may be reserved/read-only.
367
+ # @param options [Google::Gax::CallOptions]
368
+ # Overrides the default settings for this call, e.g, timeout,
369
+ # retries, etc.
370
+ # @return [Google::Datastore::V1::AllocateIdsResponse]
371
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
372
+ # @example
373
+ # require "google/cloud/datastore/v1/datastore_api"
374
+ #
375
+ # DatastoreApi = Google::Cloud::Datastore::V1::DatastoreApi
376
+ #
377
+ # datastore_api = DatastoreApi.new
378
+ # project_id = ''
379
+ # keys = []
380
+ # response = datastore_api.allocate_ids(project_id, keys)
381
+
382
+ def allocate_ids \
383
+ project_id,
384
+ keys,
385
+ options: nil
386
+ req = Google::Datastore::V1::AllocateIdsRequest.new(
387
+ project_id: project_id,
388
+ keys: keys
389
+ )
390
+ @allocate_ids.call(req, options)
391
+ end
392
+ end
393
+ end
394
+ end
395
+ end
396
+ end