Don't inadvertantly close an open transaction while using hash convenience methods.

FossilOrigin-Name: 6454408d0a2347681d8030e1788f94904aa69e7502ba695f099d964a638b8d49
This commit is contained in:
Mahlon E. Smith 2021-03-15 06:52:44 +00:00
parent 6c289674dd
commit 54a9409066
4 changed files with 53 additions and 23 deletions

View file

@ -10,7 +10,7 @@ require 'mdbx_ext'
module MDBX
# The version of this gem.
VERSION = '0.1.0'
VERSION = '0.1.1'
end # module MDBX

View file

@ -201,18 +201,24 @@ class MDBX::Database
### pairs.
###
def to_a
self.snapshot do
return self.each_pair.to_a
end
in_txn = self.in_transaction?
self.snapshot unless in_txn
return self.each_pair.to_a
ensure
self.abort unless in_txn
end
### Return the entirety of database contents as a Hash.
###
def to_h
self.snapshot do
return self.each_pair.to_h
end
in_txn = self.in_transaction?
self.snapshot unless in_txn
return self.each_pair.to_h
ensure
self.abort unless in_txn
end
@ -261,9 +267,12 @@ class MDBX::Database
### Returns a new Array containing all keys in the collection.
###
def keys
self.snapshot do
return self.each_key.to_a
end
in_txn = self.in_transaction?
self.snapshot unless in_txn
return self.each_key.to_a
ensure
self.abort unless in_txn
end
@ -271,32 +280,41 @@ class MDBX::Database
### keys. Any given keys that are not found are ignored.
###
def slice( *keys )
self.snapshot do
return keys.each_with_object( {} ) do |key, acc|
val = self[ key ]
acc[ key ] = val if val
end
in_txn = self.in_transaction?
self.snapshot unless in_txn
return keys.each_with_object( {} ) do |key, acc|
val = self[ key ]
acc[ key ] = val if val
end
ensure
self.abort unless in_txn
end
### Returns a new Array containing all values in the collection.
###
def values
self.snapshot do
return self.each_value.to_a
end
in_txn = self.in_transaction?
self.snapshot unless in_txn
return self.each_value.to_a
ensure
self.abort unless in_txn
end
### Returns a new Array containing values for the given +keys+.
###
def values_at( *keys )
self.snapshot do
return keys.each_with_object( [] ) do |key, acc|
acc << self[ key ]
end
in_txn = self.in_transaction?
self.snapshot unless in_txn
return keys.each_with_object( [] ) do |key, acc|
acc << self[ key ]
end
ensure
self.abort unless in_txn
end