6
unless(grep /blib/, @INC) {
8
@INC = '../lib' if -d '../lib';
17
if ($BerkeleyDB::db_version < 3) {
18
print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
25
my $Dfile = "dbhash.tmp";
26
my $Dfile2 = "dbhash2.tmp";
27
my $Dfile3 = "dbhash3.tmp";
32
# Berkeley DB 3.x specific functionality
34
# Check for invalid parameters
36
# Check for invalid parameters
38
eval ' BerkeleyDB::db_remove -Stupid => 3 ; ' ;
39
ok 1, $@ =~ /unknown key value\(s\) Stupid/ ;
41
eval ' BerkeleyDB::db_remove -Bad => 2, -Filename => "fred", -Stupid => 3; ' ;
42
ok 2, $@ =~ /unknown key value\(s\) (Bad |Stupid ){2}/ ;
44
eval ' BerkeleyDB::db_remove -Filename => "a", -Env => 2 ' ;
45
ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
47
eval ' BerkeleyDB::db_remove -Subname => "a"' ;
48
ok 4, $@ =~ /^Must specify a filename/ ;
50
my $obj = bless [], "main" ;
51
eval ' BerkeleyDB::db_remove -Filename => "x", -Env => $obj ' ;
52
ok 5, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
58
# opening a subdatabse in an exsiting database that doesn't have
59
# subdatabases at all should fail
61
my $lex = new LexFile $Dfile ;
63
ok 6, my $db = new BerkeleyDB::Hash -Filename => $Dfile,
75
ok 7, addData($db, %data) ;
79
$db = new BerkeleyDB::Hash -Filename => $Dfile,
84
ok 10, ! BerkeleyDB::db_remove(-Filename => $Dfile) ;
90
# opening a subdatabse in an exsiting database that does have
91
# subdatabases at all, but not this one
93
my $lex = new LexFile $Dfile ;
95
ok 11, my $db = new BerkeleyDB::Hash -Filename => $Dfile,
108
ok 12, addData($db, %data) ;
112
$db = new BerkeleyDB::Hash -Filename => $Dfile,
122
my $lex = new LexFile $Dfile ;
124
ok 14, my $db = new BerkeleyDB::Hash -Filename => $Dfile,
126
-Flags => DB_CREATE ;
137
ok 15, addData($db, %data) ;
141
ok 16, $db = new BerkeleyDB::Hash -Filename => $Dfile,
144
ok 17, my $cursor = $db->db_cursor() ;
145
my ($k, $v) = ("", "") ;
147
while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
148
if ($data{$k} eq $v) {
152
ok 18, $status == DB_NOTFOUND ;
153
ok 19, keys %data == 0 ;
159
# opening a database with multiple subdatabases - handle should be a list
160
# of the subdatabase names
162
my $lex = new LexFile $Dfile ;
164
ok 20, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
166
-Flags => DB_CREATE ;
168
ok 21, my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
170
-Flags => DB_CREATE ;
181
ok 22, addData($db1, %data) ;
182
ok 23, addData($db2, %data) ;
187
ok 24, my $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
188
-Flags => DB_RDONLY ;
190
#my $type = $db->type() ; print "type $type\n" ;
191
ok 25, my $cursor = $db->db_cursor() ;
192
my ($k, $v) = ("", "") ;
195
while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
198
ok 26, $status == DB_NOTFOUND ;
199
ok 27, join(",", sort @dbnames) eq "fred,joe" ;
202
ok 28, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "harry") != 0;
203
ok 29, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") == 0 ;
205
# should only be one subdatabase
206
ok 30, $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
207
-Flags => DB_RDONLY ;
209
ok 31, $cursor = $db->db_cursor() ;
211
while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
214
ok 32, $status == DB_NOTFOUND ;
215
ok 33, join(",", sort @dbnames) eq "joe" ;
218
# can't delete an already deleted subdatabase
219
ok 34, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") != 0;
221
ok 35, BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "joe") == 0 ;
223
# should only be one subdatabase
224
ok 36, $db = new BerkeleyDB::Unknown -Filename => $Dfile ,
225
-Flags => DB_RDONLY ;
227
ok 37, $cursor = $db->db_cursor() ;
229
while (($status = $cursor->c_get($k, $v, DB_NEXT)) == 0) {
232
ok 38, $status == DB_NOTFOUND ;
233
ok 39, @dbnames == 0 ;
238
ok 41, BerkeleyDB::db_remove(-Filename => $Dfile) == 0 ;
240
ok 43, BerkeleyDB::db_remove(-Filename => $Dfile) != 0 ;