⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 db-recno.t

📁 berkeleyDB,强大的嵌入式数据,多个数据库的内核
💻 T
📖 第 1 页 / 共 3 页
字号:
    # $# sets array to bigger    ok(91, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ;    if ($FA)      { $#h = 6 }    else       { $self->STORESIZE(7) }    ok(92, $FA ? $#h == 6 : $self->length() == 7) ;    undef $self ;    ok(93, safeUntie \@h);    $x = docat($Dfile) ;    ok(94, $x eq "abc\ndef\nghi\njkl\n\n\n\n") ;    # $# sets array smaller    ok(95, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ;    if ($FA)      { $#h = 2 }    else       { $self->STORESIZE(3) }    ok(96, $FA ? $#h == 2 : $self->length() == 3) ;    undef $self ;    ok(97, safeUntie \@h);    $x = docat($Dfile) ;    ok(98, $x eq "abc\ndef\nghi\n") ;    unlink $Dfile;}{   # DBM Filter tests   use warnings ;   use strict ;   my (@h, $db) ;   my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   unlink $Dfile;   sub checkOutput   {       my($fk, $sk, $fv, $sv) = @_ ;       print "# Fetch Key   : expected '$fk' got '$fetch_key'\n"            if $fetch_key ne $fk ;       print "# Fetch Value : expected '$fv' got '$fetch_value'\n"            if $fetch_value ne $fv ;       print "# Store Key   : expected '$sk' got '$store_key'\n"            if $store_key ne $sk ;       print "# Store Value : expected '$sv' got '$store_value'\n"            if $store_value ne $sv ;       print "# \$_          : expected 'original' got '$_'\n"            if $_ ne 'original' ;       return           $fetch_key   eq $fk && $store_key   eq $sk && 	   $fetch_value eq $fv && $store_value eq $sv &&	   $_ eq 'original' ;   }      ok(99, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );   $db->filter_fetch_key   (sub { $fetch_key = $_ }) ;   $db->filter_store_key   (sub { $store_key = $_ }) ;   $db->filter_fetch_value (sub { $fetch_value = $_}) ;   $db->filter_store_value (sub { $store_value = $_ }) ;   $_ = "original" ;   $h[0] = "joe" ;   #                   fk   sk     fv   sv   ok(100, checkOutput( "", 0, "", "joe")) ;   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   ok(101, $h[0] eq "joe");   #                   fk  sk  fv    sv   ok(102, checkOutput( "", 0, "joe", "")) ;   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   ok(103, $db->FIRSTKEY() == 0) ;   #                    fk     sk  fv  sv   ok(104, checkOutput( 0, "", "", "")) ;   # replace the filters, but remember the previous set   my ($old_fk) = $db->filter_fetch_key      			(sub { ++ $_ ; $fetch_key = $_ }) ;   my ($old_sk) = $db->filter_store_key      			(sub { $_ *= 2 ; $store_key = $_ }) ;   my ($old_fv) = $db->filter_fetch_value    			(sub { $_ = "[$_]"; $fetch_value = $_ }) ;   my ($old_sv) = $db->filter_store_value    			(sub { s/o/x/g; $store_value = $_ }) ;      ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   $h[1] = "Joe" ;   #                   fk   sk     fv    sv   ok(105, checkOutput( "", 2, "", "Jxe")) ;   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   ok(106, $h[1] eq "[Jxe]");   #                   fk   sk     fv    sv   ok(107, checkOutput( "", 2, "[Jxe]", "")) ;   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   ok(108, $db->FIRSTKEY() == 1) ;   #                   fk   sk     fv    sv   ok(109, checkOutput( 1, "", "", "")) ;      # put the original filters back   $db->filter_fetch_key   ($old_fk);   $db->filter_store_key   ($old_sk);   $db->filter_fetch_value ($old_fv);   $db->filter_store_value ($old_sv);   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   $h[0] = "joe" ;   ok(110, checkOutput( "", 0, "", "joe")) ;   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   ok(111, $h[0] eq "joe");   ok(112, checkOutput( "", 0, "joe", "")) ;   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   ok(113, $db->FIRSTKEY() == 0) ;   ok(114, checkOutput( 0, "", "", "")) ;   # delete the filters   $db->filter_fetch_key   (undef);   $db->filter_store_key   (undef);   $db->filter_fetch_value (undef);   $db->filter_store_value (undef);   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   $h[0] = "joe" ;   ok(115, checkOutput( "", "", "", "")) ;   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   ok(116, $h[0] eq "joe");   ok(117, checkOutput( "", "", "", "")) ;   ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;   ok(118, $db->FIRSTKEY() == 0) ;   ok(119, checkOutput( "", "", "", "")) ;   undef $db ;   ok(120, safeUntie \@h);   unlink $Dfile;}{        # DBM Filter with a closure    use warnings ;    use strict ;    my (@h, $db) ;    unlink $Dfile;    ok(121, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );    my %result = () ;    sub Closure    {        my ($name) = @_ ;	my $count = 0 ;	my @kept = () ;	return sub { ++$count ; 		     push @kept, $_ ; 		     $result{$name} = "$name - $count: [@kept]" ;		   }    }    $db->filter_store_key(Closure("store key")) ;    $db->filter_store_value(Closure("store value")) ;    $db->filter_fetch_key(Closure("fetch key")) ;    $db->filter_fetch_value(Closure("fetch value")) ;    $_ = "original" ;    $h[0] = "joe" ;    ok(122, $result{"store key"} eq "store key - 1: [0]");    ok(123, $result{"store value"} eq "store value - 1: [joe]");    ok(124, ! defined $result{"fetch key"} );    ok(125, ! defined $result{"fetch value"} );    ok(126, $_ eq "original") ;    ok(127, $db->FIRSTKEY() == 0 ) ;    ok(128, $result{"store key"} eq "store key - 1: [0]");    ok(129, $result{"store value"} eq "store value - 1: [joe]");    ok(130, $result{"fetch key"} eq "fetch key - 1: [0]");    ok(131, ! defined $result{"fetch value"} );    ok(132, $_ eq "original") ;    $h[7]  = "john" ;    ok(133, $result{"store key"} eq "store key - 2: [0 7]");    ok(134, $result{"store value"} eq "store value - 2: [joe john]");    ok(135, $result{"fetch key"} eq "fetch key - 1: [0]");    ok(136, ! defined $result{"fetch value"} );    ok(137, $_ eq "original") ;    ok(138, $h[0] eq "joe");    ok(139, $result{"store key"} eq "store key - 3: [0 7 0]");    ok(140, $result{"store value"} eq "store value - 2: [joe john]");    ok(141, $result{"fetch key"} eq "fetch key - 1: [0]");    ok(142, $result{"fetch value"} eq "fetch value - 1: [joe]");    ok(143, $_ eq "original") ;    undef $db ;    ok(144, safeUntie \@h);    unlink $Dfile;}		{   # DBM Filter recursion detection   use warnings ;   use strict ;   my (@h, $db) ;   unlink $Dfile;   ok(145, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );   $db->filter_store_key (sub { $_ = $h[0] }) ;   eval '$h[1] = 1234' ;   ok(146, $@ =~ /^recursion detected in filter_store_key at/ );      undef $db ;   ok(147, safeUntie \@h);   unlink $Dfile;}{   # Examples from the POD  my $file = "xyzt" ;  {    my $redirect = new Redirect $file ;    use warnings FATAL => qw(all);    use strict ;    use DB_File ;    my $filename = "text" ;    unlink $filename ;    my @h ;    my $x = tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_RECNO         or die "Cannot open file 'text': $!\n" ;    # Add a few key/value pairs to the file    $h[0] = "orange" ;    $h[1] = "blue" ;    $h[2] = "yellow" ;    $FA ? push @h, "green", "black"         : $x->push("green", "black") ;    my $elements = $FA ? scalar @h : $x->length ;    print "The array contains $elements entries\n" ;    my $last = $FA ? pop @h : $x->pop ;    print "popped $last\n" ;    $FA ? unshift @h, "white"         : $x->unshift("white") ;    my $first = $FA ? shift @h : $x->shift ;    print "shifted $first\n" ;    # Check for existence of a key    print "Element 1 Exists with value $h[1]\n" if $h[1] ;    # use a negative index    print "The last element is $h[-1]\n" ;    print "The 2nd last element is $h[-2]\n" ;    undef $x ;    untie @h ;    unlink $filename ;  }    ok(148, docat_del($file) eq <<'EOM') ;The array contains 5 entriespopped blackshifted whiteElement 1 Exists with value blueThe last element is greenThe 2nd last element is yellowEOM  my $save_output = "xyzt" ;  {    my $redirect = new Redirect $save_output ;    use warnings FATAL => qw(all);    use strict ;    our (@h, $H, $file, $i);    use DB_File ;    use Fcntl ;        $file = "text" ;    unlink $file ;    $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0640, $DB_RECNO         or die "Cannot open file $file: $!\n" ;        # first create a text file to play with    $h[0] = "zero" ;    $h[1] = "one" ;    $h[2] = "two" ;    $h[3] = "three" ;    $h[4] = "four" ;        # Print the records in order.    #    # The length method is needed here because evaluating a tied    # array in a scalar context does not return the number of    # elements in the array.      print "\nORIGINAL\n" ;    foreach $i (0 .. $H->length - 1) {        print "$i: $h[$i]\n" ;    }    # use the push & pop methods    $a = $H->pop ;    $H->push("last") ;    print "\nThe last record was [$a]\n" ;    # and the shift & unshift methods    $a = $H->shift ;    $H->unshift("first") ;    print "The first record was [$a]\n" ;    # Use the API to add a new record after record 2.    $i = 2 ;    $H->put($i, "Newbie", R_IAFTER) ;    # and a new record before record 1.    $i = 1 ;    $H->put($i, "New One", R_IBEFORE) ;    # delete record 3    $H->del(3) ;    # now print the records in reverse order    print "\nREVERSE\n" ;    for ($i = $H->length - 1 ; $i >= 0 ; -- $i)      { print "$i: $h[$i]\n" }    # same again, but use the API functions instead    print "\nREVERSE again\n" ;    my ($s, $k, $v)  = (0, 0, 0) ;    for ($s = $H->seq($k, $v, R_LAST) ;              $s == 0 ;              $s = $H->seq($k, $v, R_PREV))      { print "$k: $v\n" }    undef $H ;    untie @h ;        unlink $file ;  }    ok(149, docat_del($save_output) eq <<'EOM') ;ORIGINAL0: zero1: one2: two3: three4: fourThe last record was [four]The first record was [zero]REVERSE5: last4: three3: Newbie2: one1: New One0: firstREVERSE again5: last4: three3: Newbie2: one1: New One0: firstEOM   }{    # Bug ID 20001013.009    #    # test that $hash{KEY} = undef doesn't produce the warning    #     Use of uninitialized value in null operation     use warnings ;    use strict ;    use DB_File ;    unlink $Dfile;    my @h ;    my $a = "";    local $SIG{__WARN__} = sub {$a = $_[0]} ;        tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO 	or die "Can't open file: $!\n" ;    $h[0] = undef;    ok(150, $a eq "") ;    ok(151, safeUntie \@h);    unlink $Dfile;}{    # test that %hash = () doesn't produce the warning    #     Argument "" isn't numeric in entersub    use warnings ;    use strict ;    use DB_File ;    my $a = "";    local $SIG{__WARN__} = sub {$a = $_[0]} ;    unlink $Dfile;    my @h ;        tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO 	or die "Can't open file: $!\n" ;    @h = (); ;    ok(152, $a eq "") ;    ok(153, safeUntie \@h);    unlink $Dfile;}{   # Check that DBM Filter can cope with read-only $_   use warnings ;   use strict ;   my (@h, $db) ;   unlink $Dfile;   ok(154, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );   $db->filter_fetch_key   (sub { }) ;   $db->filter_store_key   (sub { }) ;   $db->filter_fetch_value (sub { }) ;   $db->filter_store_value (sub { }) ;   $_ = "original" ;   $h[0] = "joe" ;   ok(155, $h[0] eq "joe");   eval { grep { $h[$_] } (1, 2, 3) };   ok (156, ! $@);   # delete the filters   $db->filter_fetch_key   (undef);   $db->filter_store_key   (undef);   $db->filter_fetch_value (undef);   $db->filter_store_value (undef);   $h[1] = "joe" ;   ok(157, $h[1] eq "joe");   eval { grep { $h[$_] } (1, 2, 3) };   ok (158, ! $@);   undef $db ;   untie @h;   unlink $Dfile;}{   # Check low-level API works with filter   use warnings ;   use strict ;   my (@h, $db) ;   my $Dfile = "xxy.db";   unlink $Dfile;   ok(159, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );   $db->filter_fetch_key   (sub { ++ $_ } );   $db->filter_store_key   (sub { -- $_ } );   $db->filter_fetch_value (sub { $_ = unpack("i", $_) } );   $db->filter_store_value (sub { $_ = pack("i", $_) } );   $_ = 'fred';   my $key = 22 ;   my $value = 34 ;   $db->put($key, $value) ;   ok 160, $key == 22;   ok 161, $value == 34 ;   ok 162, $_ eq 'fred';   #print "k [$key][$value]\n" ;   my $val ;   $db->get($key, $val) ;   ok 163, $key == 22;   ok 164, $val == 34 ;   ok 165, $_ eq 'fred';   $key = 51 ;   $value = 454;   $h[$key] = $value ;   ok 166, $key == 51;   ok 167, $value == 454 ;   ok 168, $_ eq 'fred';   undef $db ;   untie @h;   unlink $Dfile;}{    # Regression Test for bug 30237    # Check that substr can be used in the key to db_put    # and that db_put does not trigger the warning    # 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -