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
58 59 60 |
# File 'lib/google/cloud/datastore/transaction.rb', line 58 def id @id end |
Instance Method Details
#commit {|commit| ... } ⇒ Object
Commits a transaction.
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 |
# File 'lib/google/cloud/datastore/transaction.rb', line 297 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.
155 156 157 158 159 |
# File 'lib/google/cloud/datastore/transaction.rb', line 155 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.
176 177 178 179 180 181 182 |
# File 'lib/google/cloud/datastore/transaction.rb', line 176 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.
199 200 201 202 203 204 |
# File 'lib/google/cloud/datastore/transaction.rb', line 199 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.
117 118 119 120 121 |
# File 'lib/google/cloud/datastore/transaction.rb', line 117 def insert *entities @commit.insert(*entities) # Do not insert yet entities end |
#reset! ⇒ Object
Reset the transaction. #start must be called afterwards.
354 355 356 357 |
# File 'lib/google/cloud/datastore/transaction.rb', line 354 def reset! @id = nil @commit = Commit.new end |
#rollback ⇒ Object
Rolls a transaction back.
341 342 343 344 345 346 347 348 349 |
# File 'lib/google/cloud/datastore/transaction.rb', line 341 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.
230 231 232 233 234 235 236 237 238 239 |
# File 'lib/google/cloud/datastore/transaction.rb', line 230 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.
89 90 91 92 93 |
# File 'lib/google/cloud/datastore/transaction.rb', line 89 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.
245 246 247 248 249 250 251 |
# File 'lib/google/cloud/datastore/transaction.rb', line 245 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.
139 140 141 142 143 |
# File 'lib/google/cloud/datastore/transaction.rb', line 139 def update *entities @commit.update(*entities) # Do not update yet entities end |