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

MySQL数据库

开发平台:

Visual C++

  1. #!./perl -w
  2. use strict ; 
  3. BEGIN {
  4.     unless(grep /blib/, @INC) {
  5.         chdir 't' if -d 't';
  6.         @INC = '../lib' if -d '../lib';
  7.     }
  8. }
  9. use BerkeleyDB; 
  10. use File::Path qw(rmtree);
  11. print "1..7n";
  12. my $FA = 0 ;
  13. {
  14.     sub try::TIEARRAY { bless [], "try" }
  15.     sub try::FETCHSIZE { $FA = 1 }
  16.     $FA = 0 ;
  17.     my @a ; 
  18.     tie @a, 'try' ;
  19.     my $a = @a ;
  20. }
  21. {
  22.     package LexFile ;
  23.     sub new
  24.     {
  25. my $self = shift ;
  26. unlink @_ ;
  27.   bless [ @_ ], $self ;
  28.     }
  29.     sub DESTROY
  30.     {
  31. my $self = shift ;
  32. unlink @{ $self } ;
  33.     }
  34. }
  35. sub ok
  36. {
  37.     my $no = shift ;
  38.     my $result = shift ;
  39.  
  40.     print "not " unless $result ;
  41.     print "ok $non" ;
  42. }
  43. {
  44.     package Redirect ;
  45.     use Symbol ;
  46.     sub new
  47.     {
  48.         my $class = shift ;
  49.         my $filename = shift ;
  50. my $fh = gensym ;
  51. open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
  52. my $real_stdout = select($fh) ;
  53. return bless [$fh, $real_stdout ] ;
  54.     }
  55.     sub DESTROY
  56.     {
  57.         my $self = shift ;
  58. close $self->[0] ;
  59. select($self->[1]) ;
  60.     }
  61. }
  62. sub docat
  63. {
  64.     my $file = shift;
  65.     local $/ = undef;
  66.     open(CAT,$file) || die "Cannot open $file:$!";
  67.     my $result = <CAT> || "" ;
  68.     close(CAT);
  69.     return $result;
  70. }
  71. sub docat_del
  72.     my $file = shift;
  73.     local $/ = undef;
  74.     open(CAT,$file) || die "Cannot open $file: $!";
  75.     my $result = <CAT> || "" ;
  76.     close(CAT);
  77.     unlink $file ;
  78.     return $result;
  79. }   
  80. my $Dfile = "dbhash.tmp";
  81. my $Dfile2 = "dbhash2.tmp";
  82. my $Dfile3 = "dbhash3.tmp";
  83. unlink $Dfile;
  84. umask(0) ;
  85. my $redirect = "xyzt" ;
  86. {
  87. my $x = $BerkeleyDB::Error;
  88. my $redirect = "xyzt" ;
  89.  {
  90.     my $redirectObj = new Redirect $redirect ;
  91.     use strict ;
  92.     use BerkeleyDB ;
  93.     use vars qw( %h $k $v ) ;
  94.     
  95.     my $filename = "fruit" ;
  96.     unlink $filename ;
  97.     tie %h, "BerkeleyDB::Hash", 
  98.                 -Filename => $filename, 
  99. -Flags    => DB_CREATE
  100.         or die "Cannot open file $filename: $! $BerkeleyDB::Errorn" ;
  101.     # Add a few key/value pairs to the file
  102.     $h{"apple"} = "red" ;
  103.     $h{"orange"} = "orange" ;
  104.     $h{"banana"} = "yellow" ;
  105.     $h{"tomato"} = "red" ;
  106.     
  107.     # Check for existence of a key
  108.     print "Banana Existsnn" if $h{"banana"} ;
  109.     
  110.     # Delete a key/value pair.
  111.     delete $h{"apple"} ;
  112.     
  113.     # print the contents of the file
  114.     while (($k, $v) = each %h)
  115.       { print "$k -> $vn" }
  116.       
  117.     untie %h ;
  118.     unlink $filename ;
  119.  }
  120.   #print "[" . docat($redirect) . "]" ;
  121.   ok(1, docat_del($redirect) eq <<'EOM') ;
  122. Banana Exists
  123. orange -> orange
  124. tomato -> red
  125. banana -> yellow
  126. EOM
  127. }
  128. {
  129. my $redirect = "xyzt" ;
  130.  {
  131.     my $redirectObj = new Redirect $redirect ;
  132.     use strict ;
  133.     use BerkeleyDB ;
  134.     
  135.     my $filename = "fruit" ;
  136.     unlink $filename ;
  137.     my $db = new BerkeleyDB::Hash 
  138.                 -Filename => $filename, 
  139. -Flags    => DB_CREATE
  140.         or die "Cannot open file $filename: $! $BerkeleyDB::Errorn" ;
  141.     # Add a few key/value pairs to the file
  142.     $db->db_put("apple", "red") ;
  143.     $db->db_put("orange", "orange") ;
  144.     $db->db_put("banana", "yellow") ;
  145.     $db->db_put("tomato", "red") ;
  146.     
  147.     # Check for existence of a key
  148.     print "Banana Existsnn" if $db->db_get("banana", $v) == 0;
  149.     
  150.     # Delete a key/value pair.
  151.     $db->db_del("apple") ;
  152.     
  153.     # print the contents of the file
  154.     my ($k, $v) = ("", "") ;
  155.     my $cursor = $db->db_cursor() ;
  156.     while ($cursor->c_get($k, $v, DB_NEXT) == 0)
  157.       { print "$k -> $vn" }
  158.       
  159.     undef $cursor ;
  160.     undef $db ;
  161.     unlink $filename ;
  162.  }
  163.   #print "[" . docat($redirect) . "]" ;
  164.   ok(2, docat_del($redirect) eq <<'EOM') ;
  165. Banana Exists
  166. orange -> orange
  167. tomato -> red
  168. banana -> yellow
  169. EOM
  170. }
  171. {
  172. my $redirect = "xyzt" ;
  173.  {
  174.     my $redirectObj = new Redirect $redirect ;
  175.     use strict ;
  176.     use BerkeleyDB ;
  177.     my $filename = "tree" ;
  178.     unlink $filename ;
  179.     my %h ;
  180.     tie %h, 'BerkeleyDB::Btree', 
  181.      -Filename   => $filename, 
  182.         -Flags      => DB_CREATE
  183.       or die "Cannot open $filename: $!n" ;
  184.     # Add a key/value pair to the file
  185.     $h{'Wall'} = 'Larry' ;
  186.     $h{'Smith'} = 'John' ;
  187.     $h{'mouse'} = 'mickey' ;
  188.     $h{'duck'}  = 'donald' ;
  189.     # Delete
  190.     delete $h{"duck"} ;
  191.     # Cycle through the keys printing them in order.
  192.     # Note it is not necessary to sort the keys as
  193.     # the btree will have kept them in order automatically.
  194.     foreach (keys %h)
  195.       { print "$_n" }
  196.     untie %h ;
  197.     unlink $filename ;
  198.  }
  199.   #print "[" . docat($redirect) . "]n" ;
  200.   ok(3, docat_del($redirect) eq <<'EOM') ;
  201. Smith
  202. Wall
  203. mouse
  204. EOM
  205. }
  206. {
  207. my $redirect = "xyzt" ;
  208.  {
  209.     my $redirectObj = new Redirect $redirect ;
  210.     use strict ;
  211.     use BerkeleyDB ;
  212.     my $filename = "tree" ;
  213.     unlink $filename ;
  214.     my %h ;
  215.     tie %h, 'BerkeleyDB::Btree', 
  216.      -Filename   => $filename, 
  217.         -Flags      => DB_CREATE,
  218. -Compare    => sub { lc $_[0] cmp lc $_[1] }
  219.       or die "Cannot open $filename: $!n" ;
  220.     # Add a key/value pair to the file
  221.     $h{'Wall'} = 'Larry' ;
  222.     $h{'Smith'} = 'John' ;
  223.     $h{'mouse'} = 'mickey' ;
  224.     $h{'duck'}  = 'donald' ;
  225.     # Delete
  226.     delete $h{"duck"} ;
  227.     # Cycle through the keys printing them in order.
  228.     # Note it is not necessary to sort the keys as
  229.     # the btree will have kept them in order automatically.
  230.     foreach (keys %h)
  231.       { print "$_n" }
  232.     untie %h ;
  233.     unlink $filename ;
  234.  }
  235.   #print "[" . docat($redirect) . "]n" ;
  236.   ok(4, docat_del($redirect) eq <<'EOM') ;
  237. mouse
  238. Smith
  239. Wall
  240. EOM
  241. }
  242. {
  243. my $redirect = "xyzt" ;
  244.  {
  245.     my $redirectObj = new Redirect $redirect ;
  246.     use strict ;
  247.     use BerkeleyDB ;
  248.     my %hash ;
  249.     my $filename = "filt.db" ;
  250.     unlink $filename ;
  251.     my $db = tie %hash, 'BerkeleyDB::Hash', 
  252.      -Filename   => $filename, 
  253.         -Flags      => DB_CREATE
  254.       or die "Cannot open $filename: $!n" ;
  255.     # Install DBM Filters
  256.     $db->filter_fetch_key  ( sub { s/$//    } ) ;
  257.     $db->filter_store_key  ( sub { $_ .= "" } ) ;
  258.     $db->filter_fetch_value( sub { s/$//    } ) ;
  259.     $db->filter_store_value( sub { $_ .= "" } ) ;
  260.     $hash{"abc"} = "def" ;
  261.     my $a = $hash{"ABC"} ;
  262.     # ...
  263.     undef $db ;
  264.     untie %hash ;
  265.     $db = tie %hash, 'BerkeleyDB::Hash', 
  266.      -Filename   => $filename, 
  267.         -Flags      => DB_CREATE
  268.       or die "Cannot open $filename: $!n" ;
  269.     while (($k, $v) = each %hash)
  270.       { print "$k -> $vn" }
  271.     undef $db ;
  272.     untie %hash ;
  273.     unlink $filename ;
  274.  }
  275.   #print "[" . docat($redirect) . "]n" ;
  276.   ok(5, docat_del($redirect) eq <<"EOM") ;
  277. abcx00 -> defx00
  278. EOM
  279. }
  280. {
  281. my $redirect = "xyzt" ;
  282.  {
  283.     my $redirectObj = new Redirect $redirect ;
  284.     use strict ;
  285.     use BerkeleyDB ;
  286.     my %hash ;
  287.     my $filename = "filt.db" ;
  288.     unlink $filename ;
  289.     my $db = tie %hash, 'BerkeleyDB::Btree', 
  290.      -Filename   => $filename, 
  291.         -Flags      => DB_CREATE
  292.       or die "Cannot open $filename: $!n" ;
  293.     $db->filter_fetch_key  ( sub { $_ = unpack("i", $_) } ) ;
  294.     $db->filter_store_key  ( sub { $_ = pack ("i", $_) } ) ;
  295.     $hash{123} = "def" ;
  296.     # ...
  297.     undef $db ;
  298.     untie %hash ;
  299.     $db = tie %hash, 'BerkeleyDB::Btree', 
  300.      -Filename   => $filename, 
  301.         -Flags      => DB_CREATE
  302.       or die "Cannot Open $filename: $!n" ;
  303.     while (($k, $v) = each %hash)
  304.       { print "$k -> $vn" }
  305.     undef $db ;
  306.     untie %hash ;
  307.     unlink $filename ;
  308.  }
  309.   my $val = pack("i", 123) ;
  310.   #print "[" . docat($redirect) . "]n" ;
  311.   ok(6, docat_del($redirect) eq <<"EOM") ;
  312. $val -> def
  313. EOM
  314. }
  315. {
  316. my $redirect = "xyzt" ;
  317.  {
  318.     my $redirectObj = new Redirect $redirect ;
  319.     if ($FA) {
  320.     use strict ;
  321.     use BerkeleyDB ;
  322.     my $filename = "text" ;
  323.     unlink $filename ;
  324.     my @h ;
  325.     tie @h, 'BerkeleyDB::Recno', 
  326.      -Filename   => $filename, 
  327.         -Flags      => DB_CREATE,
  328. -Property   => DB_RENUMBER
  329.       or die "Cannot open $filename: $!n" ;
  330.     # Add a few key/value pairs to the file
  331.     $h[0] = "orange" ;
  332.     $h[1] = "blue" ;
  333.     $h[2] = "yellow" ;
  334.     push @h, "green", "black" ;
  335.     my $elements = scalar @h ;
  336.     print "The array contains $elements entriesn" ;
  337.     my $last = pop @h ;
  338.     print "popped $lastn" ;
  339.     unshift @h, "white" ;
  340.     my $first = shift @h ;
  341.     print "shifted $firstn" ;
  342.     # Check for existence of a key
  343.     print "Element 1 Exists with value $h[1]n" if $h[1] ;
  344.     untie @h ;
  345.     unlink $filename ;
  346.     } else {
  347.     use strict ;
  348.     use BerkeleyDB ;
  349.     my $filename = "text" ;
  350.     unlink $filename ;
  351.     my @h ;
  352.     my $db = tie @h, 'BerkeleyDB::Recno', 
  353.      -Filename   => $filename, 
  354.         -Flags      => DB_CREATE,
  355. -Property   => DB_RENUMBER
  356.       or die "Cannot open $filename: $!n" ;
  357.     # Add a few key/value pairs to the file
  358.     $h[0] = "orange" ;
  359.     $h[1] = "blue" ;
  360.     $h[2] = "yellow" ;
  361.     $db->push("green", "black") ;
  362.     my $elements = $db->length() ;
  363.     print "The array contains $elements entriesn" ;
  364.     my $last = $db->pop ;
  365.     print "popped $lastn" ;
  366.     $db->unshift("white") ;
  367.     my $first = $db->shift ;
  368.     print "shifted $firstn" ;
  369.     # Check for existence of a key
  370.     print "Element 1 Exists with value $h[1]n" if $h[1] ;
  371.     undef $db ;
  372.     untie @h ;
  373.     unlink $filename ;
  374.     }
  375.  }
  376.   #print "[" . docat($redirect) . "]n" ;
  377.   ok(7, docat_del($redirect) eq <<"EOM") ;
  378. The array contains 5 entries
  379. popped black
  380. shifted white
  381. Element 1 Exists with value blue
  382. EOM
  383. }