mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-17 01:26:25 +00:00
212 lines
4.7 KiB
Perl
212 lines
4.7 KiB
Perl
|
#!./perl -w
|
||
|
|
||
|
# ID: %I%, %G%
|
||
|
|
||
|
use strict ;
|
||
|
|
||
|
use lib 't' ;
|
||
|
use BerkeleyDB;
|
||
|
use util ;
|
||
|
use Test::More;
|
||
|
plan tests => 50;
|
||
|
|
||
|
my $Dfile = "dbhash.tmp";
|
||
|
unlink $Dfile;
|
||
|
|
||
|
umask(0) ;
|
||
|
|
||
|
|
||
|
# Check for invalid parameters
|
||
|
{
|
||
|
# Check for invalid parameters
|
||
|
my $db ;
|
||
|
eval ' $db = new BerkeleyDB::Unknown -Stupid => 3 ; ' ;
|
||
|
ok $@ =~ /unknown key value\(s\) Stupid/ ;
|
||
|
|
||
|
eval ' $db = new BerkeleyDB::Unknown -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
|
||
|
ok $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/ ;
|
||
|
|
||
|
eval ' $db = new BerkeleyDB::Unknown -Env => 2 ' ;
|
||
|
ok $@ =~ /^Env not of type BerkeleyDB::Env/ ;
|
||
|
|
||
|
eval ' $db = new BerkeleyDB::Unknown -Txn => "fred" ' ;
|
||
|
ok $@ =~ /^Txn not of type BerkeleyDB::Txn/ ;
|
||
|
|
||
|
my $obj = bless [], "main" ;
|
||
|
eval ' $db = new BerkeleyDB::Unknown -Env => $obj ' ;
|
||
|
ok $@ =~ /^Env not of type BerkeleyDB::Env/ ;
|
||
|
}
|
||
|
|
||
|
# check the interface to a rubbish database
|
||
|
{
|
||
|
# first an empty file
|
||
|
my $lex = new LexFile $Dfile ;
|
||
|
ok writeFile($Dfile, "") ;
|
||
|
|
||
|
ok ! (new BerkeleyDB::Unknown -Filename => $Dfile);
|
||
|
|
||
|
# now a non-database file
|
||
|
writeFile($Dfile, "\x2af6") ;
|
||
|
ok ! (new BerkeleyDB::Unknown -Filename => $Dfile);
|
||
|
}
|
||
|
|
||
|
# check the interface to a Hash database
|
||
|
|
||
|
{
|
||
|
my $lex = new LexFile $Dfile ;
|
||
|
|
||
|
# create a hash database
|
||
|
ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
|
||
|
-Flags => DB_CREATE ;
|
||
|
|
||
|
# Add a few k/v pairs
|
||
|
my $value ;
|
||
|
my $status ;
|
||
|
ok $db->db_put("some key", "some value") == 0
|
||
|
or diag "Cannot db_put: [$!][$BerkeleyDB::Error]\n" ;
|
||
|
|
||
|
ok $db->db_put("key", "value") == 0 ;
|
||
|
|
||
|
# close the database
|
||
|
undef $db ;
|
||
|
|
||
|
# now open it with Unknown
|
||
|
ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
|
||
|
|
||
|
ok $db->type() == DB_HASH ;
|
||
|
ok $db->db_get("some key", $value) == 0 ;
|
||
|
ok $value eq "some value" ;
|
||
|
ok $db->db_get("key", $value) == 0 ;
|
||
|
ok $value eq "value" ;
|
||
|
|
||
|
my @array ;
|
||
|
eval { $db->Tie(\@array)} ;
|
||
|
ok $@ =~ /^Tie needs a reference to a hash/ ;
|
||
|
|
||
|
my %hash ;
|
||
|
$db->Tie(\%hash) ;
|
||
|
ok $hash{"some key"} eq "some value" ;
|
||
|
|
||
|
}
|
||
|
|
||
|
# check the interface to a Btree database
|
||
|
|
||
|
{
|
||
|
my $lex = new LexFile $Dfile ;
|
||
|
|
||
|
# create a hash database
|
||
|
ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
|
||
|
-Flags => DB_CREATE ;
|
||
|
|
||
|
# Add a few k/v pairs
|
||
|
my $value ;
|
||
|
my $status ;
|
||
|
ok $db->db_put("some key", "some value") == 0 ;
|
||
|
ok $db->db_put("key", "value") == 0 ;
|
||
|
|
||
|
# close the database
|
||
|
undef $db ;
|
||
|
|
||
|
# now open it with Unknown
|
||
|
# create a hash database
|
||
|
ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
|
||
|
|
||
|
ok $db->type() == DB_BTREE ;
|
||
|
ok $db->db_get("some key", $value) == 0 ;
|
||
|
ok $value eq "some value" ;
|
||
|
ok $db->db_get("key", $value) == 0 ;
|
||
|
ok $value eq "value" ;
|
||
|
|
||
|
|
||
|
my @array ;
|
||
|
eval { $db->Tie(\@array)} ;
|
||
|
ok $@ =~ /^Tie needs a reference to a hash/ ;
|
||
|
|
||
|
my %hash ;
|
||
|
$db->Tie(\%hash) ;
|
||
|
ok $hash{"some key"} eq "some value" ;
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
# check the interface to a Recno database
|
||
|
|
||
|
if(1)
|
||
|
{
|
||
|
my $lex = new LexFile $Dfile ;
|
||
|
|
||
|
# create a recno database
|
||
|
ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
|
||
|
-Flags => DB_CREATE ;
|
||
|
|
||
|
# Add a few k/v pairs
|
||
|
my $value ;
|
||
|
my $status ;
|
||
|
ok $db->db_put(0, "some value") == 0 ;
|
||
|
ok $db->db_put(1, "value") == 0 ;
|
||
|
|
||
|
# close the database
|
||
|
undef $db ;
|
||
|
|
||
|
# now open it with Unknown
|
||
|
# create a hash database
|
||
|
ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
|
||
|
|
||
|
ok $db->type() == DB_RECNO ;
|
||
|
ok $db->db_get(0, $value) == 0 ;
|
||
|
ok $value eq "some value" ;
|
||
|
ok $db->db_get(1, $value) == 0 ;
|
||
|
ok $value eq "value" ;
|
||
|
|
||
|
|
||
|
my %hash ;
|
||
|
eval { $db->Tie(\%hash)} ;
|
||
|
ok $@ =~ /^Tie needs a reference to an array/ ;
|
||
|
|
||
|
my @array ;
|
||
|
$db->Tie(\@array) ;
|
||
|
ok $array[1] eq "value" ;
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
# check the interface to a Heap database
|
||
|
|
||
|
SKIP:
|
||
|
{
|
||
|
skip "Heap support not available", 9
|
||
|
unless BerkeleyDB::has_heap() ;
|
||
|
|
||
|
my $lex = new LexFile $Dfile ;
|
||
|
|
||
|
# create a hash database
|
||
|
ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
|
||
|
-Flags => DB_CREATE ;
|
||
|
|
||
|
# Add a few k/v pairs
|
||
|
my $key1 = "" ;
|
||
|
my $key2 ;
|
||
|
my $value ;
|
||
|
my $status ;
|
||
|
ok $db->db_put($key1, "some value", DB_APPEND) == 0 ;
|
||
|
ok $db->db_put($key2, "value", DB_APPEND) == 0 ;
|
||
|
|
||
|
# close the database
|
||
|
undef $db ;
|
||
|
|
||
|
# now open it with Unknown
|
||
|
# create a hash database
|
||
|
ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
|
||
|
|
||
|
ok $db->type() == DB_HEAP ;
|
||
|
ok $db->db_get($key1, $value) == 0
|
||
|
or diag "Cannot db_get: [$!][$BerkeleyDB::Error]\n" ;
|
||
|
ok $value eq "some value" ;
|
||
|
ok $db->db_get($key2, $value) == 0 ;
|
||
|
ok $value eq "value" ;
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
# check i/f to text
|