bdb 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +20 -0
- data/README.textile +95 -0
- data/VERSION +1 -0
- data/ext/bdb.c +3025 -0
- data/ext/bdb.h +104 -0
- data/ext/extconf.rb +91 -0
- data/lib/bdb/base.rb +60 -0
- data/lib/bdb/database.rb +184 -0
- data/lib/bdb/environment.rb +119 -0
- data/lib/bdb/partitioned_database.rb +74 -0
- data/lib/bdb/result_set.rb +41 -0
- data/test/benchmark.rb +31 -0
- data/test/cursor_test.rb +150 -0
- data/test/db_test.rb +157 -0
- data/test/env_test.rb +101 -0
- data/test/simple_test.rb +93 -0
- data/test/stat_test.rb +22 -0
- data/test/test_helper.rb +7 -0
- data/test/txn_test.rb +74 -0
- metadata +82 -0
data/test/env_test.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class EnvTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_cachesize
|
6
|
+
env = Bdb::Env.new(0)
|
7
|
+
env.cachesize = 1024*1024*500
|
8
|
+
assert_equal 1024*1024*500, env.cachesize
|
9
|
+
|
10
|
+
env.cachesize = 1024*1024*1024*3
|
11
|
+
assert_equal 1024*1024*1024*3, env.cachesize
|
12
|
+
|
13
|
+
env.cachesize = 1024*1024*1024*3+1
|
14
|
+
assert_equal 1024*1024*1024*3+1, env.cachesize
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_flags
|
18
|
+
env = Bdb::Env.new(0)
|
19
|
+
|
20
|
+
env.flags_on = Bdb::DB_AUTO_COMMIT | Bdb::DB_DSYNC_DB
|
21
|
+
assert_equal Bdb::DB_AUTO_COMMIT | Bdb::DB_DSYNC_DB, env.flags
|
22
|
+
|
23
|
+
env.flags_off = Bdb::DB_AUTO_COMMIT | Bdb::DB_DSYNC_DB
|
24
|
+
assert_equal 0, env.flags
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_list_dbs
|
28
|
+
env = Bdb::Env.new(0)
|
29
|
+
assert env.list_dbs.empty?
|
30
|
+
|
31
|
+
db = env.db
|
32
|
+
assert_equal db, env.list_dbs.first
|
33
|
+
db.close(0)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_set_and_get_timeout
|
37
|
+
env = Bdb::Env.new(0)
|
38
|
+
env.set_timeout(10, Bdb::DB_SET_LOCK_TIMEOUT)
|
39
|
+
assert_equal 10, env.get_timeout(Bdb::DB_SET_LOCK_TIMEOUT)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_set_and_get_tx_max
|
43
|
+
env = Bdb::Env.new(0)
|
44
|
+
env.set_tx_max(100)
|
45
|
+
assert_equal 100, env.get_tx_max
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_set_and_get_lk_detect
|
49
|
+
env = Bdb::Env.new(0)
|
50
|
+
env.set_lk_detect(Bdb::DB_LOCK_MAXWRITE)
|
51
|
+
assert_equal Bdb::DB_LOCK_MAXWRITE, env.get_lk_detect
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_set_and_get_lk_max_locks
|
55
|
+
env = Bdb::Env.new(0)
|
56
|
+
env.set_lk_max_locks(10_000)
|
57
|
+
assert_equal 10_000, env.get_lk_max_locks
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_set_and_get_lk_max_objects
|
61
|
+
env = Bdb::Env.new(0)
|
62
|
+
env.set_lk_max_objects(10_000)
|
63
|
+
assert_equal 10_000, env.get_lk_max_objects
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_set_and_get_shm_key
|
67
|
+
env = Bdb::Env.new(0)
|
68
|
+
env.set_shm_key(2506400)
|
69
|
+
assert_equal 2506400, env.get_shm_key
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_set_and_get_data_dir
|
73
|
+
env = Bdb::Env.new(0)
|
74
|
+
env.set_data_dir('/tmp')
|
75
|
+
assert_equal ['/tmp'], env.get_data_dirs
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_set_lg_dir
|
79
|
+
env = Bdb::Env.new(0)
|
80
|
+
env.set_lg_dir('/tmp')
|
81
|
+
assert_equal '/tmp', env.get_lg_dir
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_set_tmp_dir
|
85
|
+
env = Bdb::Env.new(0)
|
86
|
+
env.set_tmp_dir('/tmp')
|
87
|
+
assert_equal '/tmp', env.get_tmp_dir
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_get_home
|
91
|
+
env = Bdb::Env.new(0)
|
92
|
+
tmp_dir = File.expand_path(File.join(File.dirname(__FILE__), 'tmp'))
|
93
|
+
mkdir_p tmp_dir
|
94
|
+
env.open(tmp_dir, Bdb::DB_CREATE, 0);
|
95
|
+
assert_equal tmp_dir, env.get_home
|
96
|
+
env.close
|
97
|
+
ensure
|
98
|
+
rm_rf tmp_dir
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
data/test/simple_test.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/bdb/simple'
|
3
|
+
|
4
|
+
class SimpleTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@path = File.join(File.dirname(__FILE__), 'tmp')
|
7
|
+
rm_rf @path
|
8
|
+
mkdir @path
|
9
|
+
open
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
close
|
14
|
+
rm_rf @path
|
15
|
+
end
|
16
|
+
|
17
|
+
def open
|
18
|
+
@db = Bdb::Simple.new(@path)
|
19
|
+
@dbd = Bdb::Simple.new(@path, :name => 'dup', :dup => true)
|
20
|
+
end
|
21
|
+
|
22
|
+
def close
|
23
|
+
@db.close
|
24
|
+
@dbd.close
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_put_and_get
|
28
|
+
@db['key'] = 'data'
|
29
|
+
assert_equal 'data', @db['key']
|
30
|
+
|
31
|
+
@dbd['key'] = 'data1'
|
32
|
+
@dbd['key'] = 'data2'
|
33
|
+
assert_equal ['data1', 'data2'], @dbd['key'].to_a
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_update
|
37
|
+
@db[:key] = 0
|
38
|
+
close
|
39
|
+
|
40
|
+
pids = []
|
41
|
+
5.times do
|
42
|
+
pids << Process.fork do
|
43
|
+
db = Bdb::Simple.new(@path)
|
44
|
+
10.times do
|
45
|
+
db.update(:key) do |v|
|
46
|
+
sleep(0.1)
|
47
|
+
v + 1
|
48
|
+
end
|
49
|
+
end
|
50
|
+
db.close
|
51
|
+
end
|
52
|
+
end
|
53
|
+
pids.each {|pid| Process.wait(pid)}
|
54
|
+
|
55
|
+
open
|
56
|
+
assert_equal 50, @db[:key]
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
def test_delete
|
61
|
+
@db['key'] = 'data'
|
62
|
+
assert_equal 'data', @db['key']
|
63
|
+
|
64
|
+
@db.delete('key')
|
65
|
+
assert_nil @db['key']
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_range
|
69
|
+
(1..10).each {|i| @db[i] = "data#{i}"}
|
70
|
+
|
71
|
+
assert_equal (3..7).collect {|i| "data#{i}"}, @db[3..7].to_a
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_compare_absolute
|
75
|
+
list = [5, 6, "foo", :bar, "bar", :foo, [1,2,4], true, [1,2,3], false, [1], [2], nil, {}, {:b => 1, :a => 1}, {:b => 2, :a => 1}]
|
76
|
+
|
77
|
+
expected = [nil, false, true, 5, 6, :bar, :foo, "bar", "foo", [1], [1, 2, 3], [1, 2, 4], [2], {}, {:a=>1, :b=>1}, {:a=>1, :b=>2}]
|
78
|
+
assert_equal expected, list.sort {|a,b| Bdb::Simple.compare_absolute(a,b)}
|
79
|
+
100.times do
|
80
|
+
assert_equal expected, list.shuffle.sort {|a,b| Bdb::Simple.compare_absolute(a,b)}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def parallel(n)
|
85
|
+
threads = []
|
86
|
+
n.times do |i|
|
87
|
+
threads << Thread.new do
|
88
|
+
yield(i)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
threads.each { |thread| thread.join }
|
92
|
+
end
|
93
|
+
end
|
data/test/stat_test.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DbStat < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
mkdir File.join(File.dirname(__FILE__), 'tmp')
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
rm_rf File.join(File.dirname(__FILE__), 'tmp')
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_stat
|
14
|
+
@db = Bdb::Db.new
|
15
|
+
@db.open(nil, File.join(File.dirname(__FILE__), 'tmp', 'test.db'), nil, Bdb::Db::BTREE, Bdb::DB_CREATE, 0)
|
16
|
+
@db.put(nil, 'key', 'data', 0)
|
17
|
+
stats = @db.stat(nil, 0)
|
18
|
+
assert_equal 1, stats['bt_nkeys']
|
19
|
+
@db.close(0)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/test/test_helper.rb
ADDED
data/test/txn_test.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TxnTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
mkdir File.join(File.dirname(__FILE__), 'tmp')
|
7
|
+
@env = Bdb::Env.new(0)
|
8
|
+
env_flags = Bdb::DB_CREATE | # Create the environment if it does not already exist.
|
9
|
+
Bdb::DB_INIT_TXN | # Initialize transactions
|
10
|
+
Bdb::DB_INIT_LOCK | # Initialize locking.
|
11
|
+
Bdb::DB_INIT_LOG | # Initialize logging
|
12
|
+
Bdb::DB_INIT_MPOOL # Initialize the in-memory cache.
|
13
|
+
@env.open(File.join(File.dirname(__FILE__), 'tmp'), env_flags, 0);
|
14
|
+
|
15
|
+
@db = @env.db
|
16
|
+
@db.open(nil, 'db1.db', nil, Bdb::Db::BTREE, Bdb::DB_CREATE | Bdb::DB_AUTO_COMMIT, 0)
|
17
|
+
end
|
18
|
+
|
19
|
+
def teardown
|
20
|
+
@db.close(0)
|
21
|
+
@env.close
|
22
|
+
rm_rf File.join(File.dirname(__FILE__), 'tmp')
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_commit
|
26
|
+
txn = @env.txn_begin(nil, 0)
|
27
|
+
@db.put(txn, 'key', 'value', 0)
|
28
|
+
txn.commit(0)
|
29
|
+
assert_equal 'value', @db.get(nil, 'key', nil, 0)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_abort
|
33
|
+
txn = @env.txn_begin(nil, 0)
|
34
|
+
@db.put(txn, 'key', 'value', 0)
|
35
|
+
txn.abort
|
36
|
+
assert_nil @db.get(nil, 'key', nil, 0)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_id
|
40
|
+
txn = @env.txn_begin(nil, 0)
|
41
|
+
@db.put(txn, 'key', 'value', 0)
|
42
|
+
assert txn.tid
|
43
|
+
txn.commit(0)
|
44
|
+
assert_equal 'value', @db.get(nil, 'key', nil, 0)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_timeout
|
48
|
+
txn = @env.txn_begin(nil, 0)
|
49
|
+
txn.set_timeout(10, Bdb::DB_SET_TXN_TIMEOUT)
|
50
|
+
@db.put(txn, 'key', 'value', 0)
|
51
|
+
txn.commit(0)
|
52
|
+
assert_equal 'value', @db.get(nil, 'key', nil, 0)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_stat
|
56
|
+
txn = @env.txn_begin(nil, 0)
|
57
|
+
@db.put(txn, 'key', 'value', 0)
|
58
|
+
txn.commit(0)
|
59
|
+
txn_stat = @env.txn_stat(0)
|
60
|
+
assert txn_stat
|
61
|
+
assert txn_stat['st_ncommits'] > 0
|
62
|
+
assert_equal 'value', @db.get(nil, 'key', nil, 0)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_stat_active
|
66
|
+
txn = @env.txn_begin(nil, 0)
|
67
|
+
@db.put(txn, 'key', 'value', 0)
|
68
|
+
txn_stat = @env.txn_stat(0)
|
69
|
+
txn.commit(0)
|
70
|
+
assert_equal 1, txn_stat['st_txnarray'].length
|
71
|
+
assert_equal 'value', @db.get(nil, 'key', nil, 0)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bdb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Justin Balthrop
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-11-20 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Advanced Ruby Berkeley DB library.
|
17
|
+
email: code@justinbalthrop.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions:
|
21
|
+
- ext/extconf.rb
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.textile
|
25
|
+
files:
|
26
|
+
- VERSION
|
27
|
+
- ext/bdb.c
|
28
|
+
- ext/bdb.h
|
29
|
+
- ext/extconf.rb
|
30
|
+
- lib/bdb/base.rb
|
31
|
+
- lib/bdb/database.rb
|
32
|
+
- lib/bdb/environment.rb
|
33
|
+
- lib/bdb/partitioned_database.rb
|
34
|
+
- lib/bdb/result_set.rb
|
35
|
+
- test/benchmark.rb
|
36
|
+
- test/cursor_test.rb
|
37
|
+
- test/db_test.rb
|
38
|
+
- test/env_test.rb
|
39
|
+
- test/simple_test.rb
|
40
|
+
- test/stat_test.rb
|
41
|
+
- test/test_helper.rb
|
42
|
+
- test/txn_test.rb
|
43
|
+
- LICENSE
|
44
|
+
- README.textile
|
45
|
+
has_rdoc: true
|
46
|
+
homepage: http://github.com/ninjudd/bdb
|
47
|
+
licenses: []
|
48
|
+
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options:
|
51
|
+
- --charset=UTF-8
|
52
|
+
require_paths:
|
53
|
+
- ext
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
version:
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
requirements: []
|
68
|
+
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 1.3.5
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: Ruby Berkeley DB
|
74
|
+
test_files:
|
75
|
+
- test/benchmark.rb
|
76
|
+
- test/cursor_test.rb
|
77
|
+
- test/db_test.rb
|
78
|
+
- test/env_test.rb
|
79
|
+
- test/simple_test.rb
|
80
|
+
- test/stat_test.rb
|
81
|
+
- test/test_helper.rb
|
82
|
+
- test/txn_test.rb
|