Class: Gcloud::Datastore::Transaction
- Defined in:
- lib/gcloud/datastore/transaction.rb
Overview
Transaction
Special Connection instance for running transactions.
See Gcloud::Datastore::Dataset.transaction
Instance Attribute Summary collapse
-
#id ⇒ Object
readonly
Returns the value of attribute id.
Attributes inherited from Dataset
Instance Method Summary collapse
-
#commit ⇒ Object
Commits a transaction.
-
#delete(*entities) ⇒ Object
Remove entities in a transaction.
-
#initialize(connection) ⇒ Transaction
constructor
Creates a new Transaction instance.
-
#reset! ⇒ Object
Reset the transaction.
-
#rollback ⇒ Object
Rolls a transaction back.
-
#save(*entities) ⇒ Object
Persist entities in a transaction.
-
#start ⇒ Object
(also: #begin_transaction)
Begins a transaction.
Methods inherited from Dataset
#allocate_ids, default_project, #find, #find_all, #project, #run, #transaction
Constructor Details
#initialize(connection) ⇒ Transaction
Creates a new Transaction instance. Takes a Connection instead of project and Credentials.
30 31 32 33 34 |
# File 'lib/gcloud/datastore/transaction.rb', line 30 def initialize connection #:nodoc: @connection = connection reset! start end |
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id.
25 26 27 |
# File 'lib/gcloud/datastore/transaction.rb', line 25 def id @id end |
Instance Method Details
#commit ⇒ Object
Commits a transaction.
79 80 81 82 83 84 85 86 87 |
# File 'lib/gcloud/datastore/transaction.rb', line 79 def commit if @id.nil? fail TransactionError, "Cannot commit when not in a transaction." end response = connection.commit shared_mutation, @id auto_id_assign_ids response.mutation_result.insert_auto_id_key true end |
#delete(*entities) ⇒ Object
Remove entities in a transaction.
dataset.transaction do |tx|
if tx.find(user.key).nil?
tx.delete task1, task2
end
end
58 59 60 61 62 63 64 |
# File 'lib/gcloud/datastore/transaction.rb', line 58 def delete *entities shared_mutation.tap do |m| m.delete = entities.map { |entity| entity.key.to_proto } end # Do not delete yet true end |
#reset! ⇒ Object
Reset the transaction. Transaction#start must be called afterwards.
103 104 105 106 107 |
# File 'lib/gcloud/datastore/transaction.rb', line 103 def reset! @shared_mutation = nil @id = nil @_auto_id_entities = [] end |
#rollback ⇒ Object
Rolls a transaction back.
91 92 93 94 95 96 97 98 |
# File 'lib/gcloud/datastore/transaction.rb', line 91 def rollback if @id.nil? fail TransactionError, "Cannot rollback when not in a transaction." end connection.rollback @id true end |
#save(*entities) ⇒ Object
Persist entities in a transaction.
dataset.transaction do |tx|
if tx.find(user.key).nil?
tx.save task1, task2
end
end
44 45 46 47 48 |
# File 'lib/gcloud/datastore/transaction.rb', line 44 def save *entities save_entities_to_mutation entities, shared_mutation # Do not save or assign auto_ids yet entities end |
#start ⇒ Object Also known as: begin_transaction
Begins a transaction. This method is run when a new Transaction is created.
69 70 71 72 73 74 |
# File 'lib/gcloud/datastore/transaction.rb', line 69 def start fail TransactionError, "Transaction already opened." unless @id.nil? response = connection.begin_transaction @id = response.transaction end |