Simple BDB wrapper library for bdb
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Ash Moran 50e2fbe843 Bump version to 0.0.12.2 12 years ago
lib Remove the (erroneously re-added) weakref.rb file and the require line that was still including it (project now uses the ref gem) 12 years ago
.gitignore weakhash entfernt. ref-gem 12 years ago
AUTHORS little changes: metafiles 13 years ago
LICENSE license added 13 years ago
README.md rubinius-compatible; ref.gem. README: INIT_TRANSACTION 12 years ago
Rakefile Bump version to 0.0.12.1 to bump bdb dependency to 0.2.6.5 12 years ago
VERSION Bump version to 0.0.12.2 12 years ago

README.md

Dependencies

You need first the Bdb and of course ruby.

Download

via git:

git clone git://github.com/ruby-bdb/sbdb

Install

gem build sbdb.gemspec
gem install sbdb-*.gem

Usage

First, open environment and database

require 'sbdb'
Dir.mkdir 'newenv'  rescue Errno::EEXIST
env = SBDB::Env.new 'newenv', SBDB::CREATE | SBDB::Env::INIT_TRANSACTION
db = env.btree 'newdb.db', :flags => SBDB::CREATE

It works nearly like a Ruby-Hash:

db['key'] = 'value'
db['key']   # => 'value'
db.to_hash  # => {'key'=>'value'}
db.map {|k, v| "k => v" } # => ["key => value"]
db.count    # => 1
db.each {|k,v| puts "#{k}: #{v}" }

SBDB::DB#each uses a SBDB::Cursor:

cursor = db.cursor
cursor.each {|k,v| puts "#{k}: #{v}" }

Don't forget to close everything, you've opened!

cursor.close
db.close
env.close

But you can use a lambda to ensure to close everything:

SBDB::Env.new( 'newenv', SBDB::CREATE | SBDB::Env::INIT_TRANSACTION) do |env|
	env.open SBDB::Btree, 'newdb.db', :flags => SBDB::CREATE do |db|
		db.to_hash
	end
end

SBDB::DB#to_hash creates a cursor and close it later.

Tip:

Signal.trap 'EXIT', env.method( :close)