Class: Google::Cloud::Datastore::Transaction
- Defined in:
- lib/google/cloud/datastore/transaction.rb
Overview
Instance Attribute Summary collapse
-
#id ⇒ Object
readonly
Returns the value of attribute id.
Instance Method Summary collapse
-
#commit {|commit| ... } ⇒ Object
Commits a transaction.
-
#delete(*entities_or_keys) ⇒ Object
Remove entities in a transaction.
-
#find(key_or_kind, id_or_name = nil) ⇒ Google::Cloud::Datastore::Entity?
(also: #get)
Retrieve an entity by providing key information.
-
#find_all(*keys) ⇒ Google::Cloud::Datastore::Dataset::LookupResults
(also: #lookup)
Retrieve the entities for the provided keys.
-
#insert(*entities) ⇒ Object
Insert entities in a transaction.
-
#reset! ⇒ Object
Reset the transaction.
-
#rollback ⇒ Object
Rolls a transaction back.
-
#run(query, namespace: nil) ⇒ Google::Cloud::Datastore::Dataset::QueryResults
(also: #run_query)
Retrieve entities specified by a Query.
-
#save(*entities) ⇒ Object
(also: #upsert)
Persist entities in a transaction.
-
#start ⇒ Object
(also: #begin_transaction)
Begins a transaction.
-
#update(*entities) ⇒ Object
Update entities in a transaction.
Methods inherited from Dataset
#allocate_ids, #entity, #gql, #key, #project, #query, #transaction
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id
57 58 59 |
# File 'lib/google/cloud/datastore/transaction.rb', line 57 def id @id end |
Instance Method Details
#commit {|commit| ... } ⇒ Object
Commits a transaction.
331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 |
# File 'lib/google/cloud/datastore/transaction.rb', line 331 def commit fail TransactionError, "Cannot commit when not in a transaction." if @id.nil? yield @commit if block_given? ensure_service! commit_res = service.commit @commit.mutations, transaction: @id entities = @commit.entities returned_keys = commit_res.mutation_results.map(&:key) returned_keys.each_with_index do |key, index| next if entities[index].nil? entities[index].key = Key.from_grpc(key) unless key.nil? end # Make sure all entity keys are frozen so all show as persisted entities.each { |e| e.key.freeze unless e.persisted? } true end |
#delete(*entities_or_keys) ⇒ Object
Remove entities in a transaction.
170 171 172 173 174 |
# File 'lib/google/cloud/datastore/transaction.rb', line 170 def delete *entities_or_keys @commit.delete(*entities_or_keys) # Do not delete yet true end |
#find(key_or_kind, id_or_name = nil) ⇒ Google::Cloud::Datastore::Entity? Also known as: get
Retrieve an entity by providing key information. The lookup is run within the transaction.
199 200 201 202 203 204 205 |
# File 'lib/google/cloud/datastore/transaction.rb', line 199 def find key_or_kind, id_or_name = nil key = key_or_kind unless key.is_a? Google::Cloud::Datastore::Key key = Key.new key_or_kind, id_or_name end find_all(key).first end |
#find_all(*keys) ⇒ Google::Cloud::Datastore::Dataset::LookupResults Also known as: lookup
Retrieve the entities for the provided keys. The lookup is run within the transaction.
225 226 227 228 229 230 |
# File 'lib/google/cloud/datastore/transaction.rb', line 225 def find_all *keys ensure_service! lookup_res = service.lookup(*Array(keys).flatten.map(&:to_grpc), transaction: @id) LookupResults.from_grpc lookup_res, service, nil, @id end |
#insert(*entities) ⇒ Object
Insert entities in a transaction. An InvalidArgumentError will raised if the entities cannot be inserted.
124 125 126 127 128 |
# File 'lib/google/cloud/datastore/transaction.rb', line 124 def insert *entities @commit.insert(*entities) # Do not insert yet entities end |
#reset! ⇒ Object
Reset the transaction. #start must be called afterwards.
388 389 390 391 |
# File 'lib/google/cloud/datastore/transaction.rb', line 388 def reset! @id = nil @commit = Commit.new end |
#rollback ⇒ Object
Rolls a transaction back.
375 376 377 378 379 380 381 382 383 |
# File 'lib/google/cloud/datastore/transaction.rb', line 375 def rollback if @id.nil? fail TransactionError, "Cannot rollback when not in a transaction." end ensure_service! service.rollback @id true end |
#run(query, namespace: nil) ⇒ Google::Cloud::Datastore::Dataset::QueryResults Also known as: run_query
Retrieve entities specified by a Query. The query is run within the transaction.
264 265 266 267 268 269 270 271 272 273 |
# File 'lib/google/cloud/datastore/transaction.rb', line 264 def run query, namespace: nil ensure_service! unless query.is_a?(Query) || query.is_a?(GqlQuery) fail ArgumentError, "Cannot run a #{query.class} object." end query_res = service.run_query query.to_grpc, namespace, transaction: @id QueryResults.from_grpc query_res, service, namespace, query.to_grpc.dup end |
#save(*entities) ⇒ Object Also known as: upsert
Persist entities in a transaction.
92 93 94 95 96 |
# File 'lib/google/cloud/datastore/transaction.rb', line 92 def save *entities @commit.save(*entities) # Do not save yet entities end |
#start ⇒ Object Also known as: begin_transaction
Begins a transaction. This method is run when a new Transaction is created.
279 280 281 282 283 284 285 |
# File 'lib/google/cloud/datastore/transaction.rb', line 279 def start fail TransactionError, "Transaction already opened." unless @id.nil? ensure_service! tx_res = service.begin_transaction @id = tx_res.transaction end |
#update(*entities) ⇒ Object
Update entities in a transaction. An InvalidArgumentError will raised if the entities cannot be updated.
150 151 152 153 154 |
# File 'lib/google/cloud/datastore/transaction.rb', line 150 def update *entities @commit.update(*entities) # Do not update yet entities end |