1#!./perl -w 2 3# ID: 1.2, 7/17/97 4 5use strict ; 6 7use lib 't'; 8use BerkeleyDB; 9use util ; 10 11use Test::More ; 12 13BEGIN { 14 plan(skip_all => "this needs BerkeleyDB 3.x or better" ) 15 if $BerkeleyDB::db_version < 3; 16 17 plan tests => 14; 18} 19 20my $Dfile = "dbhash.tmp"; 21 22umask(0); 23 24{ 25 # set_mutexlocks 26 27 my $home = "./fred" ; 28 ok my $lexD = new LexDir($home) ; 29 chdir "./fred" ; 30 ok my $env = new BerkeleyDB::Env -Flags => DB_CREATE, @StdErrFile ; 31 ok $env->set_mutexlocks(0) == 0 ; 32 chdir ".." ; 33 undef $env ; 34} 35 36{ 37 # c_dup 38 39 40 my $lex = new LexFile $Dfile ; 41 my %hash ; 42 my ($k, $v) ; 43 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile, 44 -Flags => DB_CREATE ; 45 46 # create some data 47 my @data = ( 48 "green" => "house", 49 "red" => 2, 50 "blue" => "sea", 51 ) ; 52 53 my $ret = 0 ; 54 while (@data) 55 { 56 my $k = shift @data ; 57 my $v = shift @data ; 58 $ret += $db->db_put($k, $v) ; 59 } 60 ok $ret == 0 ; 61 62 # create a cursor 63 ok my $cursor = $db->db_cursor() ; 64 65 # point to a specific k/v pair 66 $k = "green" ; 67 ok $cursor->c_get($k, $v, DB_SET) == 0 ; 68 ok $v eq "house" ; 69 70 # duplicate the cursor 71 my $dup_cursor = $cursor->c_dup(DB_POSITION); 72 ok $dup_cursor ; 73 74 # move original cursor off green/house 75 my $s = $cursor->c_get($k, $v, DB_NEXT) ; 76 ok $k ne "green" ; 77 ok $v ne "house" ; 78 79 # duplicate cursor should still be on green/house 80 ok $dup_cursor->c_get($k, $v, DB_CURRENT) == 0; 81 ok $k eq "green" ; 82 ok $v eq "house" ; 83 84} 85 86