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