db-3.0.t
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!./perl -w
  2. # ID: 1.2, 7/17/97
  3. use strict ;
  4. BEGIN {
  5.     unless(grep /blib/, @INC) {
  6.         chdir 't' if -d 't';
  7.         @INC = '../lib' if -d '../lib';
  8.     }
  9. }
  10. use BerkeleyDB; 
  11. use File::Path qw(rmtree);
  12. BEGIN
  13. {
  14.     if ($BerkeleyDB::db_version < 3) {
  15.         print "1..0 # Skipped - this needs Berkeley DB 3.x or bettern" ;
  16.         exit 0 ;
  17.     }
  18. }        
  19. print "1..14n";
  20. {
  21.     package LexFile ;
  22.     sub new
  23.     {
  24.         my $self = shift ;
  25.         unlink @_ ;
  26.         bless [ @_ ], $self ;
  27.     }
  28.     sub DESTROY
  29.     {
  30.         my $self = shift ;
  31.         unlink @{ $self } ;
  32.     }
  33. }
  34. sub ok
  35. {
  36.     my $no = shift ;
  37.     my $result = shift ;
  38.  
  39.     print "not " unless $result ;
  40.     print "ok $non" ;
  41. }
  42. sub docat
  43. {
  44.     my $file = shift;
  45.     local $/ = undef;
  46.     open(CAT,$file) || die "Cannot open $file:$!";
  47.     my $result = <CAT>;
  48.     close(CAT);
  49.     return $result;
  50. }
  51. my $Dfile = "dbhash.tmp";
  52. umask(0);
  53. {
  54.     # set_mutexlocks
  55.     my $home = "./fred" ;
  56.     ok 1, -d $home ? chmod 0777, $home : mkdir($home, 0777) ;
  57.     mkdir "./fred", 0777 ;
  58.     chdir "./fred" ;
  59.     ok 2, my $env = new BerkeleyDB::Env -Flags => DB_CREATE ;
  60.     ok 3, $env->set_mutexlocks(0) == 0 ;
  61.     chdir ".." ;
  62.     undef $env ;
  63.     rmtree $home ;
  64. }
  65. {
  66.     # c_dup
  67.     my $lex = new LexFile $Dfile ;
  68.     my %hash ;
  69.     my ($k, $v) ;
  70.     ok 4, my $db = new BerkeleyDB::Hash -Filename => $Dfile, 
  71.      -Flags    => DB_CREATE ;
  72.     # create some data
  73.     my %data =  (
  74. "red" => 2,
  75. "green" => "house",
  76. "blue" => "sea",
  77. ) ;
  78.     my $ret = 0 ;
  79.     while (($k, $v) = each %data) {
  80.         $ret += $db->db_put($k, $v) ;
  81.     }
  82.     ok 5, $ret == 0 ;
  83.     # create a cursor
  84.     ok 6, my $cursor = $db->db_cursor() ;
  85.     # point to a specific k/v pair
  86.     $k = "green" ;
  87.     ok 7, $cursor->c_get($k, $v, DB_SET) == 0 ;
  88.     ok 8, $v eq "house" ;
  89.     # duplicate the cursor
  90.     my $dup_cursor = $cursor->c_dup(DB_POSITION);
  91.     ok 9, $dup_cursor ;
  92.     # move original cursor off green/house
  93.     $cursor->c_get($k, $v, DB_NEXT) ;
  94.     ok 10, $k ne "green" ;
  95.     ok 11, $v ne "house" ;
  96.     # duplicate cursor should still be on green/house
  97.     ok 12, $dup_cursor->c_get($k, $v, DB_CURRENT) == 0;
  98.     ok 13, $k eq "green" ;
  99.     ok 14, $v eq "house" ;
  100.     
  101. }