8
unless(grep /blib/, @INC) {
10
@INC = '../lib' if -d '../lib';
19
my $Dfile = "dbhash.tmp";
20
my $Dfile2 = "dbhash2.tmp";
21
my $Dfile3 = "dbhash3.tmp";
27
# Check for invalid parameters
29
# Check for invalid parameters
31
eval ' $db = new BerkeleyDB::Btree -Stupid => 3 ; ' ;
32
ok 1, $@ =~ /unknown key value\(s\) Stupid/ ;
34
eval ' $db = new BerkeleyDB::Btree -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
35
ok 2, $@ =~ /unknown key value\(s\) (Bad |Stupid ){2}/ ;
37
eval ' $db = new BerkeleyDB::Btree -Env => 2 ' ;
38
ok 3, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
40
eval ' $db = new BerkeleyDB::Btree -Txn => "x" ' ;
41
ok 4, $@ =~ /^Txn not of type BerkeleyDB::Txn/ ;
43
my $obj = bless [], "main" ;
44
eval ' $db = new BerkeleyDB::Btree -Env => $obj ' ;
45
ok 5, $@ =~ /^Env not of type BerkeleyDB::Env/ ;
48
# Now check the interface to Btree
51
my $lex = new LexFile $Dfile ;
53
ok 6, my $db = new BerkeleyDB::Btree -Filename => $Dfile,
59
ok 7, $db->db_put("some key", "some value") == 0 ;
60
ok 8, $db->status() == 0 ;
61
ok 9, $db->db_get("some key", $value) == 0 ;
62
ok 10, $value eq "some value" ;
63
ok 11, $db->db_put("key", "value") == 0 ;
64
ok 12, $db->db_get("key", $value) == 0 ;
65
ok 13, $value eq "value" ;
66
ok 14, $db->db_del("some key") == 0 ;
67
ok 15, ($status = $db->db_get("some key", $value)) == DB_NOTFOUND ;
68
ok 16, $db->status() == DB_NOTFOUND ;
69
ok 17, $db->status() eq $DB_errors{'DB_NOTFOUND'} ;
71
ok 18, $db->db_sync() == 0 ;
73
# Check NOOVERWRITE will make put fail when attempting to overwrite
76
ok 19, $db->db_put( 'key', 'x', DB_NOOVERWRITE) == DB_KEYEXIST ;
77
ok 20, $db->status() eq $DB_errors{'DB_KEYEXIST'} ;
78
ok 21, $db->status() == DB_KEYEXIST ;
81
# check that the value of the key has not been changed by the
83
ok 22, $db->db_get("key", $value) == 0 ;
84
ok 23, $value eq "value" ;
87
my ($k, $v) = ("key", "value") ;
88
ok 24, $db->db_get($k, $v, DB_GET_BOTH) == 0 ;
90
($k, $v) = ("key", "fred") ;
91
ok 25, $db->db_get($k, $v, DB_GET_BOTH) == DB_NOTFOUND ;
93
($k, $v) = ("another", "value") ;
94
ok 26, $db->db_get($k, $v, DB_GET_BOTH) == DB_NOTFOUND ;
100
# Check simple env works with a hash.
101
my $lex = new LexFile $Dfile ;
103
my $home = "./fred" ;
104
ok 27, my $lexD = new LexDir($home) ;
106
ok 28, my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,
108
ok 29, my $db = new BerkeleyDB::Btree -Filename => $Dfile,
110
-Flags => DB_CREATE ;
114
ok 30, $db->db_put("some key", "some value") == 0 ;
115
ok 31, $db->db_get("some key", $value) == 0 ;
116
ok 32, $value eq "some value" ;
125
my $lex = new LexFile $Dfile ;
128
ok 33, my $db = new BerkeleyDB::Btree -Filename => $Dfile,
129
-Flags => DB_CREATE ;
139
while (($k, $v) = each %data) {
140
$ret += $db->db_put($k, $v) ;
145
ok 35, my $cursor = $db->db_cursor() ;
151
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
152
if ( $copy{$k} eq $v )
157
ok 36, $cursor->status() == DB_NOTFOUND ;
158
ok 37, $cursor->status() eq $DB_errors{'DB_NOTFOUND'};
159
ok 38, keys %copy == 0 ;
160
ok 39, $extras == 0 ;
166
for ( $status = $cursor->c_get($k, $v, DB_LAST) ;
168
$status = $cursor->c_get($k, $v, DB_PREV)) {
169
if ( $copy{$k} eq $v )
174
ok 40, $status == DB_NOTFOUND ;
175
ok 41, $status eq $DB_errors{'DB_NOTFOUND'};
176
ok 42, $cursor->status() == $status ;
177
ok 43, $cursor->status() eq $status ;
178
ok 44, keys %copy == 0 ;
179
ok 45, $extras == 0 ;
181
($k, $v) = ("green", "house") ;
182
ok 46, $cursor->c_get($k, $v, DB_GET_BOTH) == 0 ;
184
($k, $v) = ("green", "door") ;
185
ok 47, $cursor->c_get($k, $v, DB_GET_BOTH) == DB_NOTFOUND ;
187
($k, $v) = ("black", "house") ;
188
ok 48, $cursor->c_get($k, $v, DB_GET_BOTH) == DB_NOTFOUND ;
193
# Tied Hash interface
195
my $lex = new LexFile $Dfile ;
197
ok 49, tie %hash, 'BerkeleyDB::Btree', -Filename => $Dfile,
198
-Flags => DB_CREATE ;
200
# check "each" with an empty database
202
while (my ($k, $v) = each %hash) {
205
ok 50, (tied %hash)->status() == DB_NOTFOUND ;
210
$hash{"some key"} = "some value";
211
ok 52, (tied %hash)->status() == 0 ;
212
ok 53, $hash{"some key"} eq "some value";
213
ok 54, defined $hash{"some key"} ;
214
ok 55, (tied %hash)->status() == 0 ;
215
ok 56, exists $hash{"some key"} ;
216
ok 57, !defined $hash{"jimmy"} ;
217
ok 58, (tied %hash)->status() == DB_NOTFOUND ;
218
ok 59, !exists $hash{"jimmy"} ;
219
ok 60, (tied %hash)->status() == DB_NOTFOUND ;
221
delete $hash{"some key"} ;
222
ok 61, (tied %hash)->status() == 0 ;
223
ok 62, ! defined $hash{"some key"} ;
224
ok 63, (tied %hash)->status() == DB_NOTFOUND ;
225
ok 64, ! exists $hash{"some key"} ;
226
ok 65, (tied %hash)->status() == DB_NOTFOUND ;
232
my ($keys, $values) = (0,0);
234
while (my ($k, $v) = each %hash) {
240
ok 67, $keys == 1011 ;
241
ok 68, $values == 2022 ;
245
ok 69, keys %hash == 0 ;
251
# override default compare
252
my $lex = new LexFile $Dfile, $Dfile2, $Dfile3 ;
255
my @Keys = qw( 0123 12 -1234 9 987654321 def ) ;
256
ok 70, tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
257
-Compare => sub { $_[0] <=> $_[1] },
258
-Flags => DB_CREATE ;
260
ok 71, tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
261
-Compare => sub { $_[0] cmp $_[1] },
262
-Flags => DB_CREATE ;
264
ok 72, tie %k, 'BerkeleyDB::Btree', -Filename => $Dfile3,
265
-Compare => sub { length $_[0] <=> length $_[1] },
266
-Flags => DB_CREATE ;
270
@srt_1 = sort { $a <=> $b } @Keys ;
272
my @srt_2 = sort { $a cmp $b } @Keys ;
273
my @srt_3 = sort { length $a <=> length $b } @Keys ;
286
return 0 if @$a != @$b ;
288
foreach (1 .. length @$a)
290
return 0 unless $$a[$_] eq $$b[$_] ;
296
ok 73, ArrayCompare (\@srt_1, [keys %h]);
297
ok 74, ArrayCompare (\@srt_2, [keys %g]);
298
ok 75, ArrayCompare (\@srt_3, [keys %k]);
303
# override default compare, with duplicates, don't sort values
304
my $lex = new LexFile $Dfile, $Dfile2, $Dfile3 ;
307
my @Keys = qw( 0123 9 12 -1234 9 987654321 def ) ;
308
my @Values = qw( 1 0 3 dd x abc 0 ) ;
309
ok 76, tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
310
-Compare => sub { $_[0] <=> $_[1] },
312
-Flags => DB_CREATE ;
314
ok 77, tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
315
-Compare => sub { $_[0] cmp $_[1] },
317
-Flags => DB_CREATE ;
319
ok 78, tie %k, 'BerkeleyDB::Btree', -Filename => $Dfile3,
320
-Compare => sub { length $_[0] <=> length $_[1] },
322
-Flags => DB_CREATE ;
326
@srt_1 = sort { $a <=> $b } @Keys ;
328
my @srt_2 = sort { $a cmp $b } @Keys ;
329
my @srt_3 = sort { length $a <=> length $b } @Keys ;
333
my $value = shift @Values ;
342
my $db = tied %$hash ;
343
my $cursor = $db->db_cursor() ;
345
my ($k, $v) = (0,0) ;
346
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
352
ok 79, ArrayCompare (\@srt_1, [keys %h]);
353
ok 80, ArrayCompare (\@srt_2, [keys %g]);
354
ok 81, ArrayCompare (\@srt_3, [keys %k]);
355
ok 82, ArrayCompare ([qw(dd 0 0 x 3 1 abc)], [getValues \%h]);
356
ok 83, ArrayCompare ([qw(dd 1 0 3 x abc 0)], [getValues \%g]);
357
ok 84, ArrayCompare ([qw(0 x 3 0 1 dd abc)], [getValues \%k]);
360
ok 85, my $cur = (tied %g)->db_cursor() ;
361
my ($k, $v) = (9, "") ;
362
ok 86, $cur->c_get($k, $v, DB_SET) == 0 ;
363
ok 87, $k == 9 && $v == 0 ;
364
ok 88, $cur->c_get($k, $v, DB_NEXT_DUP) == 0 ;
365
ok 89, $k == 9 && $v eq "x" ;
366
ok 90, $cur->c_get($k, $v, DB_NEXT_DUP) == DB_NOTFOUND ;
370
# override default compare, with duplicates, sort values
371
my $lex = new LexFile $Dfile, $Dfile2;
374
my @Keys = qw( 0123 9 12 -1234 9 987654321 9 def ) ;
375
my @Values = qw( 1 11 3 dd x abc 2 0 ) ;
376
ok 91, tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
377
-Compare => sub { $_[0] <=> $_[1] },
378
-DupCompare => sub { $_[0] cmp $_[1] },
380
-Flags => DB_CREATE ;
382
ok 92, tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
383
-Compare => sub { $_[0] cmp $_[1] },
384
-DupCompare => sub { $_[0] <=> $_[1] },
389
-Flags => DB_CREATE ;
393
@srt_1 = sort { $a <=> $b } @Keys ;
395
my @srt_2 = sort { $a cmp $b } @Keys ;
399
my $value = shift @Values ;
404
ok 93, ArrayCompare (\@srt_1, [keys %h]);
405
ok 94, ArrayCompare (\@srt_2, [keys %g]);
406
ok 95, ArrayCompare ([qw(dd 1 3 x 2 11 abc 0)], [getValues \%g]);
407
ok 96, ArrayCompare ([qw(dd 0 11 2 x 3 1 abc)], [getValues \%h]);
413
my $lex = new LexFile $Dfile;
416
ok 97, my $YY = tie %hh, "BerkeleyDB::Btree", -Filename => $Dfile,
417
-DupCompare => sub { $_[0] cmp $_[1] },
419
-Flags => DB_CREATE ;
421
$hh{'Wall'} = 'Larry' ;
422
$hh{'Wall'} = 'Stone' ; # Note the duplicate key
423
$hh{'Wall'} = 'Brick' ; # Note the duplicate key
424
$hh{'Smith'} = 'John' ;
425
$hh{'mouse'} = 'mickey' ;
427
# first work in scalar context
428
ok 98, scalar $YY->get_dup('Unknown') == 0 ;
429
ok 99, scalar $YY->get_dup('Smith') == 1 ;
430
ok 100, scalar $YY->get_dup('Wall') == 3 ;
432
# now in list context
433
my @unknown = $YY->get_dup('Unknown') ;
434
ok 101, "@unknown" eq "" ;
436
my @smith = $YY->get_dup('Smith') ;
437
ok 102, "@smith" eq "John" ;
440
my @wall = $YY->get_dup('Wall') ;
442
@wall{@wall} = @wall ;
443
ok 103, (@wall == 3 && $wall{'Larry'} && $wall{'Stone'} && $wall{'Brick'});
447
my %unknown = $YY->get_dup('Unknown', 1) ;
448
ok 104, keys %unknown == 0 ;
450
my %smith = $YY->get_dup('Smith', 1) ;
451
ok 105, keys %smith == 1 && $smith{'John'} ;
453
my %wall = $YY->get_dup('Wall', 1) ;
454
ok 106, keys %wall == 3 && $wall{'Larry'} == 1 && $wall{'Stone'} == 1
455
&& $wall{'Brick'} == 1 ;
465
my $lex = new LexFile $Dfile ;
469
ok 107, my $db = tie %hash, 'BerkeleyDB::Btree' ;
471
ok 108, $db->db_put("some key", "some value") == 0 ;
472
ok 109, $db->db_get("some key", $value) == 0 ;
473
ok 110, $value eq "some value" ;
479
# check works via API
481
my $lex = new LexFile $Dfile ;
483
ok 111, my $db = new BerkeleyDB::Btree, -Filename => $Dfile,
484
-Flags => DB_CREATE ;
494
while (my ($k, $v) = each %data) {
495
$ret += $db->db_put($k, $v) ;
501
my ($pon, $off, $len) = $db->partial_set(0,2) ;
502
ok 113, ! $pon && $off == 0 && $len == 0 ;
503
ok 114, $db->db_get("red", $value) == 0 && $value eq "bo" ;
504
ok 115, $db->db_get("green", $value) == 0 && $value eq "ho" ;
505
ok 116, $db->db_get("blue", $value) == 0 && $value eq "se" ;
507
# do a partial get, off end of data
508
($pon, $off, $len) = $db->partial_set(3,2) ;
512
ok 120, $db->db_get("red", $value) == 0 && $value eq "t" ;
513
ok 121, $db->db_get("green", $value) == 0 && $value eq "se" ;
514
ok 122, $db->db_get("blue", $value) == 0 && $value eq "" ;
516
# switch of partial mode
517
($pon, $off, $len) = $db->partial_clear() ;
521
ok 126, $db->db_get("red", $value) == 0 && $value eq "boat" ;
522
ok 127, $db->db_get("green", $value) == 0 && $value eq "house" ;
523
ok 128, $db->db_get("blue", $value) == 0 && $value eq "sea" ;
526
$db->partial_set(0,2) ;
527
ok 129, $db->db_put("red", "") == 0 ;
528
ok 130, $db->db_put("green", "AB") == 0 ;
529
ok 131, $db->db_put("blue", "XYZ") == 0 ;
530
ok 132, $db->db_put("new", "KLM") == 0 ;
532
($pon, $off, $len) = $db->partial_clear() ;
536
ok 136, $db->db_get("red", $value) == 0 && $value eq "at" ;
537
ok 137, $db->db_get("green", $value) == 0 && $value eq "ABuse" ;
538
ok 138, $db->db_get("blue", $value) == 0 && $value eq "XYZa" ;
539
ok 139, $db->db_get("new", $value) == 0 && $value eq "KLM" ;
542
($pon, $off, $len) = $db->partial_set(3,2) ;
546
ok 143, $db->db_put("red", "PPP") == 0 ;
547
ok 144, $db->db_put("green", "Q") == 0 ;
548
ok 145, $db->db_put("blue", "XYZ") == 0 ;
549
ok 146, $db->db_put("new", "TU") == 0 ;
551
$db->partial_clear() ;
552
ok 147, $db->db_get("red", $value) == 0 && $value eq "at\0PPP" ;
553
ok 148, $db->db_get("green", $value) == 0 && $value eq "ABuQ" ;
554
ok 149, $db->db_get("blue", $value) == 0 && $value eq "XYZXYZ" ;
555
ok 150, $db->db_get("new", $value) == 0 && $value eq "KLMTU" ;
560
# check works via tied hash
562
my $lex = new LexFile $Dfile ;
565
ok 151, my $db = tie %hash, 'BerkeleyDB::Btree', -Filename => $Dfile,
566
-Flags => DB_CREATE ;
575
while (my ($k, $v) = each %data) {
581
$db->partial_set(0,2) ;
582
ok 152, $hash{"red"} eq "bo" ;
583
ok 153, $hash{"green"} eq "ho" ;
584
ok 154, $hash{"blue"} eq "se" ;
586
# do a partial get, off end of data
587
$db->partial_set(3,2) ;
588
ok 155, $hash{"red"} eq "t" ;
589
ok 156, $hash{"green"} eq "se" ;
590
ok 157, $hash{"blue"} eq "" ;
592
# switch of partial mode
593
$db->partial_clear() ;
594
ok 158, $hash{"red"} eq "boat" ;
595
ok 159, $hash{"green"} eq "house" ;
596
ok 160, $hash{"blue"} eq "sea" ;
599
$db->partial_set(0,2) ;
600
ok 161, $hash{"red"} = "" ;
601
ok 162, $hash{"green"} = "AB" ;
602
ok 163, $hash{"blue"} = "XYZ" ;
603
ok 164, $hash{"new"} = "KLM" ;
605
$db->partial_clear() ;
606
ok 165, $hash{"red"} eq "at" ;
607
ok 166, $hash{"green"} eq "ABuse" ;
608
ok 167, $hash{"blue"} eq "XYZa" ;
609
ok 168, $hash{"new"} eq "KLM" ;
612
$db->partial_set(3,2) ;
613
ok 169, $hash{"red"} = "PPP" ;
614
ok 170, $hash{"green"} = "Q" ;
615
ok 171, $hash{"blue"} = "XYZ" ;
616
ok 172, $hash{"new"} = "TU" ;
618
$db->partial_clear() ;
619
ok 173, $hash{"red"} eq "at\0PPP" ;
620
ok 174, $hash{"green"} eq "ABuQ" ;
621
ok 175, $hash{"blue"} eq "XYZXYZ" ;
622
ok 176, $hash{"new"} eq "KLMTU" ;
628
my $lex = new LexFile $Dfile ;
632
my $home = "./fred" ;
633
ok 177, my $lexD = new LexDir($home) ;
634
ok 178, my $env = new BerkeleyDB::Env -Home => $home,
635
-Flags => DB_CREATE|DB_INIT_TXN|
636
DB_INIT_MPOOL|DB_INIT_LOCK ;
637
ok 179, my $txn = $env->txn_begin() ;
638
ok 180, my $db1 = tie %hash, 'BerkeleyDB::Btree', -Filename => $Dfile,
639
-Flags => DB_CREATE ,
643
ok 181, (my $Z = $txn->txn_commit()) == 0 ;
644
ok 182, $txn = $env->txn_begin() ;
655
while (my ($k, $v) = each %data) {
656
$ret += $db1->db_put($k, $v) ;
660
# should be able to see all the records
662
ok 184, my $cursor = $db1->db_cursor() ;
663
my ($k, $v) = ("", "") ;
666
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
669
ok 185, $count == 3 ;
672
# now abort the transaction
673
#ok 151, $txn->txn_abort() == 0 ;
674
ok 186, ($Z = $txn->txn_abort()) == 0 ;
676
# there shouldn't be any records in the database
679
ok 187, $cursor = $db1->db_cursor() ;
680
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
683
ok 188, $count == 0 ;
695
my $lex = new LexFile $Dfile ;
697
ok 189, my $db = tie %hash, 'BerkeleyDB::Btree', -Filename => $Dfile,
699
-Flags => DB_CREATE ;
701
$hash{'Wall'} = 'Larry' ;
702
$hash{'Wall'} = 'Stone' ;
703
$hash{'Smith'} = 'John' ;
704
$hash{'Wall'} = 'Brick' ;
705
$hash{'Wall'} = 'Brick' ;
706
$hash{'mouse'} = 'mickey' ;
708
ok 190, keys %hash == 6 ;
711
ok 191, my $cursor = $db->db_cursor() ;
715
ok 192, $cursor->c_get($key, $value, DB_SET) == 0 ;
716
ok 193, $key eq "Wall" && $value eq "Larry" ;
717
ok 194, $cursor->c_get($key, $value, DB_NEXT) == 0 ;
718
ok 195, $key eq "Wall" && $value eq "Stone" ;
719
ok 196, $cursor->c_get($key, $value, DB_NEXT) == 0 ;
720
ok 197, $key eq "Wall" && $value eq "Brick" ;
721
ok 198, $cursor->c_get($key, $value, DB_NEXT) == 0 ;
722
ok 199, $key eq "Wall" && $value eq "Brick" ;
724
#my $ref = $db->db_stat() ;
725
#ok 200, ($ref->{bt_flags} | DB_DUP) == DB_DUP ;
726
#print "bt_flags " . $ref->{bt_flags} . " DB_DUP " . DB_DUP ."\n";
737
my $lex = new LexFile $Dfile ;
738
my $recs = ($BerkeleyDB::db_version >= 3.1 ? "bt_ndata" : "bt_nrecs") ;
741
ok 200, my $db = new BerkeleyDB::Btree -Filename => $Dfile,
747
my $ref = $db->db_stat() ;
748
ok 201, $ref->{$recs} == 0;
749
ok 202, $ref->{'bt_minkey'} == 3;
750
ok 203, $ref->{'bt_pagesize'} == 2 ** 12;
760
while (($k, $v) = each %data) {
761
$ret += $db->db_put($k, $v) ;
765
$ref = $db->db_stat() ;
766
ok 205, $ref->{$recs} == 3;
776
open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ;
782
use vars qw( @ISA @EXPORT) ;
786
@ISA=qw(BerkeleyDB::Btree);
787
@EXPORT = @BerkeleyDB::EXPORT ;
793
$self->SUPER::db_put($key, $value * 3) ;
798
$self->SUPER::db_get($_[0], $_[1]) ;
806
my $value = $self->FETCH($key) ;
807
return "[[$value]]" ;
815
BEGIN { push @INC, '.'; }
817
main::ok 206, $@ eq "" ;
821
$X = tie(%h, "SubDB", -Filename => "dbbtree.tmp",
826
main::ok 207, $@ eq "" && $X ;
828
my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ;
829
main::ok 208, $@ eq "" ;
830
main::ok 209, $ret == 7 ;
833
$ret = eval '$X->db_put("joe", 4) ; $X->db_get("joe", $value) ; return $value' ;
834
main::ok 210, $@ eq "" ;
835
main::ok 211, $ret == 10 ;
837
$ret = eval ' DB_NEXT eq main::DB_NEXT ' ;
838
main::ok 212, $@ eq "" ;
839
main::ok 213, $ret == 1 ;
841
$ret = eval '$X->A_new_method("joe") ' ;
842
main::ok 214, $@ eq "" ;
843
main::ok 215, $ret eq "[[10]]" ;
847
unlink "SubDB.pm", "dbbtree.tmp" ;
852
# DB_RECNUM, DB_SET_RECNO & DB_GET_RECNO
854
my $lex = new LexFile $Dfile ;
856
my ($k, $v) = ("", "");
857
ok 216, my $db = new BerkeleyDB::Btree
860
-Property => DB_RECNUM ;
875
$ret += $db->db_put($_, $ix) ;
880
# db_get & DB_SET_RECNO
882
ok 218, $db->db_get($k, $v, DB_SET_RECNO) == 0;
883
ok 219, $k eq "B one" && $v == 1 ;
886
ok 220, $db->db_get($k, $v, DB_SET_RECNO) == 0;
887
ok 221, $k eq "D three" && $v == 3 ;
890
ok 222, $db->db_get($k, $v, DB_SET_RECNO) == 0;
891
ok 223, $k eq "E four" && $v == 4 ;
894
ok 224, $db->db_get($k, $v, DB_SET_RECNO) == 0;
895
ok 225, $k eq "A zero" && $v == 0 ;
897
# cursor & DB_SET_RECNO
900
ok 226, my $cursor = $db->db_cursor() ;
903
ok 227, $db->db_get($k, $v, DB_SET_RECNO) == 0;
904
ok 228, $k eq "C two" && $v == 2 ;
907
ok 229, $cursor->c_get($k, $v, DB_SET_RECNO) == 0;
908
ok 230, $k eq "A zero" && $v == 0 ;
911
ok 231, $db->db_get($k, $v, DB_SET_RECNO) == 0;
912
ok 232, $k eq "D three" && $v == 3 ;
914
# cursor & DB_GET_RECNO
915
ok 233, $cursor->c_get($k, $v, DB_FIRST) == 0 ;
916
ok 234, $k eq "A zero" && $v == 0 ;
917
ok 235, $cursor->c_get($k, $v, DB_GET_RECNO) == 0;
920
ok 237, $cursor->c_get($k, $v, DB_NEXT) == 0 ;
921
ok 238, $k eq "B one" && $v == 1 ;
922
ok 239, $cursor->c_get($k, $v, DB_GET_RECNO) == 0;
925
ok 241, $cursor->c_get($k, $v, DB_LAST) == 0 ;
926
ok 242, $k eq "E four" && $v == 4 ;
927
ok 243, $cursor->c_get($k, $v, DB_GET_RECNO) == 0;