examples.t.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. ## BEGIN simpleHash
  92.     use strict ;
  93.     use BerkeleyDB ;
  94.     use vars qw( %h $k $v ) ;
  95.     
  96.     my $filename = "fruit" ;
  97.     unlink $filename ;
  98.     tie %h, "BerkeleyDB::Hash", 
  99.                 -Filename => $filename, 
  100. -Flags    => DB_CREATE
  101.         or die "Cannot open file $filename: $! $BerkeleyDB::Errorn" ;
  102.     # Add a few key/value pairs to the file
  103.     $h{"apple"} = "red" ;
  104.     $h{"orange"} = "orange" ;
  105.     $h{"banana"} = "yellow" ;
  106.     $h{"tomato"} = "red" ;
  107.     
  108.     # Check for existence of a key
  109.     print "Banana Existsnn" if $h{"banana"} ;
  110.     
  111.     # Delete a key/value pair.
  112.     delete $h{"apple"} ;
  113.     
  114.     # print the contents of the file
  115.     while (($k, $v) = each %h)
  116.       { print "$k -> $vn" }
  117.       
  118.     untie %h ;
  119. ## END simpleHash
  120.     unlink $filename ;
  121.  }
  122.   #print "[" . docat($redirect) . "]" ;
  123.   ok(1, docat_del($redirect) eq <<'EOM') ;
  124. Banana Exists
  125. orange -> orange
  126. tomato -> red
  127. banana -> yellow
  128. EOM
  129. }
  130. {
  131. my $redirect = "xyzt" ;
  132.  {
  133.     my $redirectObj = new Redirect $redirect ;
  134. ## BEGIN simpleHash2
  135.     use strict ;
  136.     use BerkeleyDB ;
  137.     
  138.     my $filename = "fruit" ;
  139.     unlink $filename ;
  140.     my $db = new BerkeleyDB::Hash 
  141.                 -Filename => $filename, 
  142. -Flags    => DB_CREATE
  143.         or die "Cannot open file $filename: $! $BerkeleyDB::Errorn" ;
  144.     # Add a few key/value pairs to the file
  145.     $db->db_put("apple", "red") ;
  146.     $db->db_put("orange", "orange") ;
  147.     $db->db_put("banana", "yellow") ;
  148.     $db->db_put("tomato", "red") ;
  149.     
  150.     # Check for existence of a key
  151.     print "Banana Existsnn" if $db->db_get("banana", $v) == 0;
  152.     
  153.     # Delete a key/value pair.
  154.     $db->db_del("apple") ;
  155.     
  156.     # print the contents of the file
  157.     my ($k, $v) = ("", "") ;
  158.     my $cursor = $db->db_cursor() ;
  159.     while ($cursor->c_get($k, $v, DB_NEXT) == 0)
  160.       { print "$k -> $vn" }
  161.       
  162.     undef $cursor ;
  163.     undef $db ;
  164. ## END simpleHash2
  165.     unlink $filename ;
  166.  }
  167.   #print "[" . docat($redirect) . "]" ;
  168.   ok(2, docat_del($redirect) eq <<'EOM') ;
  169. Banana Exists
  170. orange -> orange
  171. tomato -> red
  172. banana -> yellow
  173. EOM
  174. }
  175. {
  176. my $redirect = "xyzt" ;
  177.  {
  178.     my $redirectObj = new Redirect $redirect ;
  179. ## BEGIN btreeSimple
  180.     use strict ;
  181.     use BerkeleyDB ;
  182.     my $filename = "tree" ;
  183.     unlink $filename ;
  184.     my %h ;
  185.     tie %h, 'BerkeleyDB::Btree', 
  186.      -Filename   => $filename, 
  187.         -Flags      => DB_CREATE
  188.       or die "Cannot open $filename: $!n" ;
  189.     # Add a key/value pair to the file
  190.     $h{'Wall'} = 'Larry' ;
  191.     $h{'Smith'} = 'John' ;
  192.     $h{'mouse'} = 'mickey' ;
  193.     $h{'duck'}  = 'donald' ;
  194.     # Delete
  195.     delete $h{"duck"} ;
  196.     # Cycle through the keys printing them in order.
  197.     # Note it is not necessary to sort the keys as
  198.     # the btree will have kept them in order automatically.
  199.     foreach (keys %h)
  200.       { print "$_n" }
  201.     untie %h ;
  202. ## END btreeSimple
  203.     unlink $filename ;
  204.  }
  205.   #print "[" . docat($redirect) . "]n" ;
  206.   ok(3, docat_del($redirect) eq <<'EOM') ;
  207. Smith
  208. Wall
  209. mouse
  210. EOM
  211. }
  212. {
  213. my $redirect = "xyzt" ;
  214.  {
  215.     my $redirectObj = new Redirect $redirect ;
  216. ## BEGIN btreeSortOrder
  217.     use strict ;
  218.     use BerkeleyDB ;
  219.     my $filename = "tree" ;
  220.     unlink $filename ;
  221.     my %h ;
  222.     tie %h, 'BerkeleyDB::Btree', 
  223.      -Filename   => $filename, 
  224.         -Flags      => DB_CREATE,
  225. -Compare    => sub { lc $_[0] cmp lc $_[1] }
  226.       or die "Cannot open $filename: $!n" ;
  227.     # Add a key/value pair to the file
  228.     $h{'Wall'} = 'Larry' ;
  229.     $h{'Smith'} = 'John' ;
  230.     $h{'mouse'} = 'mickey' ;
  231.     $h{'duck'}  = 'donald' ;
  232.     # Delete
  233.     delete $h{"duck"} ;
  234.     # Cycle through the keys printing them in order.
  235.     # Note it is not necessary to sort the keys as
  236.     # the btree will have kept them in order automatically.
  237.     foreach (keys %h)
  238.       { print "$_n" }
  239.     untie %h ;
  240. ## END btreeSortOrder
  241.     unlink $filename ;
  242.  }
  243.   #print "[" . docat($redirect) . "]n" ;
  244.   ok(4, docat_del($redirect) eq <<'EOM') ;
  245. mouse
  246. Smith
  247. Wall
  248. EOM
  249. }
  250. {
  251. my $redirect = "xyzt" ;
  252.  {
  253.     my $redirectObj = new Redirect $redirect ;
  254. ## BEGIN nullFilter
  255.     use strict ;
  256.     use BerkeleyDB ;
  257.     my %hash ;
  258.     my $filename = "filt.db" ;
  259.     unlink $filename ;
  260.     my $db = tie %hash, 'BerkeleyDB::Hash', 
  261.      -Filename   => $filename, 
  262.         -Flags      => DB_CREATE
  263.       or die "Cannot open $filename: $!n" ;
  264.     # Install DBM Filters
  265.     $db->filter_fetch_key  ( sub { s/$//    } ) ;
  266.     $db->filter_store_key  ( sub { $_ .= "" } ) ;
  267.     $db->filter_fetch_value( sub { s/$//    } ) ;
  268.     $db->filter_store_value( sub { $_ .= "" } ) ;
  269.     $hash{"abc"} = "def" ;
  270.     my $a = $hash{"ABC"} ;
  271.     # ...
  272.     undef $db ;
  273.     untie %hash ;
  274. ## END nullFilter
  275.     $db = tie %hash, 'BerkeleyDB::Hash', 
  276.      -Filename   => $filename, 
  277.         -Flags      => DB_CREATE
  278.       or die "Cannot open $filename: $!n" ;
  279.     while (($k, $v) = each %hash)
  280.       { print "$k -> $vn" }
  281.     undef $db ;
  282.     untie %hash ;
  283.     unlink $filename ;
  284.  }
  285.   #print "[" . docat($redirect) . "]n" ;
  286.   ok(5, docat_del($redirect) eq <<"EOM") ;
  287. abcx00 -> defx00
  288. EOM
  289. }
  290. {
  291. my $redirect = "xyzt" ;
  292.  {
  293.     my $redirectObj = new Redirect $redirect ;
  294. ## BEGIN intFilter
  295.     use strict ;
  296.     use BerkeleyDB ;
  297.     my %hash ;
  298.     my $filename = "filt.db" ;
  299.     unlink $filename ;
  300.     my $db = tie %hash, 'BerkeleyDB::Btree', 
  301.      -Filename   => $filename, 
  302.         -Flags      => DB_CREATE
  303.       or die "Cannot open $filename: $!n" ;
  304.     $db->filter_fetch_key  ( sub { $_ = unpack("i", $_) } ) ;
  305.     $db->filter_store_key  ( sub { $_ = pack ("i", $_) } ) ;
  306.     $hash{123} = "def" ;
  307.     # ...
  308.     undef $db ;
  309.     untie %hash ;
  310. ## END intFilter
  311.     $db = tie %hash, 'BerkeleyDB::Btree', 
  312.      -Filename   => $filename, 
  313.         -Flags      => DB_CREATE
  314.       or die "Cannot Open $filename: $!n" ;
  315.     while (($k, $v) = each %hash)
  316.       { print "$k -> $vn" }
  317.     undef $db ;
  318.     untie %hash ;
  319.     unlink $filename ;
  320.  }
  321.   my $val = pack("i", 123) ;
  322.   #print "[" . docat($redirect) . "]n" ;
  323.   ok(6, docat_del($redirect) eq <<"EOM") ;
  324. $val -> def
  325. EOM
  326. }
  327. {
  328. my $redirect = "xyzt" ;
  329.  {
  330.     my $redirectObj = new Redirect $redirect ;
  331.     if ($FA) {
  332. ## BEGIN simpleRecno
  333.     use strict ;
  334.     use BerkeleyDB ;
  335.     my $filename = "text" ;
  336.     unlink $filename ;
  337.     my @h ;
  338.     tie @h, 'BerkeleyDB::Recno', 
  339.      -Filename   => $filename, 
  340.         -Flags      => DB_CREATE,
  341. -Property   => DB_RENUMBER
  342.       or die "Cannot open $filename: $!n" ;
  343.     # Add a few key/value pairs to the file
  344.     $h[0] = "orange" ;
  345.     $h[1] = "blue" ;
  346.     $h[2] = "yellow" ;
  347.     push @h, "green", "black" ;
  348.     my $elements = scalar @h ;
  349.     print "The array contains $elements entriesn" ;
  350.     my $last = pop @h ;
  351.     print "popped $lastn" ;
  352.     unshift @h, "white" ;
  353.     my $first = shift @h ;
  354.     print "shifted $firstn" ;
  355.     # Check for existence of a key
  356.     print "Element 1 Exists with value $h[1]n" if $h[1] ;
  357.     untie @h ;
  358. ## END simpleRecno
  359.     unlink $filename ;
  360.     } else {
  361.     use strict ;
  362.     use BerkeleyDB ;
  363.     my $filename = "text" ;
  364.     unlink $filename ;
  365.     my @h ;
  366.     my $db = tie @h, 'BerkeleyDB::Recno', 
  367.      -Filename   => $filename, 
  368.         -Flags      => DB_CREATE,
  369. -Property   => DB_RENUMBER
  370.       or die "Cannot open $filename: $!n" ;
  371.     # Add a few key/value pairs to the file
  372.     $h[0] = "orange" ;
  373.     $h[1] = "blue" ;
  374.     $h[2] = "yellow" ;
  375.     $db->push("green", "black") ;
  376.     my $elements = $db->length() ;
  377.     print "The array contains $elements entriesn" ;
  378.     my $last = $db->pop ;
  379.     print "popped $lastn" ;
  380.     $db->unshift("white") ;
  381.     my $first = $db->shift ;
  382.     print "shifted $firstn" ;
  383.     # Check for existence of a key
  384.     print "Element 1 Exists with value $h[1]n" if $h[1] ;
  385.     undef $db ;
  386.     untie @h ;
  387.     unlink $filename ;
  388.     }
  389.  }
  390.   #print "[" . docat($redirect) . "]n" ;
  391.   ok(7, docat_del($redirect) eq <<"EOM") ;
  392. The array contains 5 entries
  393. popped black
  394. shifted white
  395. Element 1 Exists with value blue
  396. EOM
  397. }