mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-17 01:26:25 +00:00
243 lines
5.8 KiB
Perl
243 lines
5.8 KiB
Perl
|
#!./perl -w
|
||
|
|
||
|
use strict ;
|
||
|
|
||
|
use lib 't';
|
||
|
use util ;
|
||
|
|
||
|
use Test::More ;
|
||
|
|
||
|
use BerkeleyDB;
|
||
|
|
||
|
plan(skip_all => "1..0 # Skip: this needs Berkeley DB 3.1.x or better\n")
|
||
|
if $BerkeleyDB::db_version < 3.1 ;
|
||
|
|
||
|
plan(tests => 48) ;
|
||
|
|
||
|
|
||
|
my $Dfile = "dbhash.tmp";
|
||
|
my $Dfile2 = "dbhash2.tmp";
|
||
|
my $Dfile3 = "dbhash3.tmp";
|
||
|
unlink $Dfile;
|
||
|
|
||
|
umask(0) ;
|
||
|
|
||
|
|
||
|
|
||
|
{
|
||
|
title "c_count";
|
||
|
|
||
|
my $lex = new LexFile $Dfile ;
|
||
|
my %hash ;
|
||
|
my $db = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
|
||
|
-Property => DB_DUP,
|
||
|
-Flags => DB_CREATE ;
|
||
|
ok $db, " open database ok";
|
||
|
|
||
|
$hash{'Wall'} = 'Larry' ;
|
||
|
$hash{'Wall'} = 'Stone' ;
|
||
|
$hash{'Smith'} = 'John' ;
|
||
|
$hash{'Wall'} = 'Brick' ;
|
||
|
$hash{'Wall'} = 'Brick' ;
|
||
|
$hash{'mouse'} = 'mickey' ;
|
||
|
|
||
|
is keys %hash, 6, " keys == 6" ;
|
||
|
|
||
|
# create a cursor
|
||
|
my $cursor = $db->db_cursor() ;
|
||
|
ok $cursor, " created cursor";
|
||
|
|
||
|
my $key = "Wall" ;
|
||
|
my $value ;
|
||
|
cmp_ok $cursor->c_get($key, $value, DB_SET), '==', 0, " c_get ok" ;
|
||
|
is $key, "Wall", " key is 'Wall'";
|
||
|
is $value, "Larry", " value is 'Larry'"; ;
|
||
|
|
||
|
my $count ;
|
||
|
cmp_ok $cursor->c_count($count), '==', 0, " c_count ok" ;
|
||
|
is $count, 4, " count is 4" ;
|
||
|
|
||
|
$key = "Smith" ;
|
||
|
cmp_ok $cursor->c_get($key, $value, DB_SET), '==', 0, " c_get ok" ;
|
||
|
is $key, "Smith", " key is 'Smith'";
|
||
|
is $value, "John", " value is 'John'"; ;
|
||
|
|
||
|
cmp_ok $cursor->c_count($count), '==', 0, " c_count ok" ;
|
||
|
is $count, 1, " count is 1" ;
|
||
|
|
||
|
|
||
|
undef $db ;
|
||
|
undef $cursor ;
|
||
|
untie %hash ;
|
||
|
|
||
|
}
|
||
|
|
||
|
{
|
||
|
title "db_key_range";
|
||
|
|
||
|
my $lex = new LexFile $Dfile ;
|
||
|
my %hash ;
|
||
|
my $db = tie %hash, 'BerkeleyDB::Btree', -Filename => $Dfile,
|
||
|
-Property => DB_DUP,
|
||
|
-Flags => DB_CREATE ;
|
||
|
isa_ok $db, 'BerkeleyDB::Btree', " create database ok";
|
||
|
|
||
|
$hash{'Wall'} = 'Larry' ;
|
||
|
$hash{'Wall'} = 'Stone' ;
|
||
|
$hash{'Smith'} = 'John' ;
|
||
|
$hash{'Wall'} = 'Brick' ;
|
||
|
$hash{'Wall'} = 'Brick' ;
|
||
|
$hash{'mouse'} = 'mickey' ;
|
||
|
|
||
|
is keys %hash, 6, " 6 keys" ;
|
||
|
|
||
|
my $key = "Wall" ;
|
||
|
my ($less, $equal, $greater) ;
|
||
|
cmp_ok $db->db_key_range($key, $less, $equal, $greater), '==', 0, " db_key_range ok" ;
|
||
|
|
||
|
cmp_ok $less, '!=', 0 ;
|
||
|
cmp_ok $equal, '!=', 0 ;
|
||
|
cmp_ok $greater, '!=', 0 ;
|
||
|
|
||
|
$key = "Smith" ;
|
||
|
cmp_ok $db->db_key_range($key, $less, $equal, $greater), '==', 0, " db_key_range ok" ;
|
||
|
|
||
|
cmp_ok $less, '==', 0 ;
|
||
|
cmp_ok $equal, '!=', 0 ;
|
||
|
cmp_ok $greater, '!=', 0 ;
|
||
|
|
||
|
$key = "NotThere" ;
|
||
|
cmp_ok $db->db_key_range($key, $less, $equal, $greater), '==', 0, " db_key_range ok" ;
|
||
|
|
||
|
cmp_ok $less, '==', 0 ;
|
||
|
cmp_ok $equal, '==', 0 ;
|
||
|
cmp_ok $greater, '==', 1 ;
|
||
|
|
||
|
undef $db ;
|
||
|
untie %hash ;
|
||
|
|
||
|
}
|
||
|
|
||
|
{
|
||
|
title "rename a subdb";
|
||
|
|
||
|
my $lex = new LexFile $Dfile ;
|
||
|
|
||
|
my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
|
||
|
-Subname => "fred" ,
|
||
|
-Flags => DB_CREATE ;
|
||
|
isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
|
||
|
|
||
|
my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
|
||
|
-Subname => "joe" ,
|
||
|
-Flags => DB_CREATE ;
|
||
|
isa_ok $db2, 'BerkeleyDB::Btree', " create database ok";
|
||
|
|
||
|
# Add a k/v pair
|
||
|
my %data = qw(
|
||
|
red sky
|
||
|
blue sea
|
||
|
black heart
|
||
|
yellow belley
|
||
|
green grass
|
||
|
) ;
|
||
|
|
||
|
ok addData($db1, %data), " added to db1 ok" ;
|
||
|
ok addData($db2, %data), " added to db2 ok" ;
|
||
|
|
||
|
undef $db1 ;
|
||
|
undef $db2 ;
|
||
|
|
||
|
# now rename
|
||
|
cmp_ok BerkeleyDB::db_rename(-Filename => $Dfile,
|
||
|
-Subname => "fred",
|
||
|
-Newname => "harry"), '==', 0, " rename ok";
|
||
|
|
||
|
my $db3 = new BerkeleyDB::Hash -Filename => $Dfile,
|
||
|
-Subname => "harry" ;
|
||
|
isa_ok $db3, 'BerkeleyDB::Hash', " verify rename";
|
||
|
|
||
|
}
|
||
|
|
||
|
{
|
||
|
title "rename a file";
|
||
|
|
||
|
my $lex = new LexFile $Dfile, $Dfile2 ;
|
||
|
|
||
|
my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
|
||
|
-Subname => "fred" ,
|
||
|
-Flags => DB_CREATE;
|
||
|
isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
|
||
|
|
||
|
my $db2 = new BerkeleyDB::Hash -Filename => $Dfile,
|
||
|
-Subname => "joe" ,
|
||
|
-Flags => DB_CREATE ;
|
||
|
isa_ok $db2, 'BerkeleyDB::Hash', " create database ok";
|
||
|
|
||
|
# Add a k/v pair
|
||
|
my %data = qw(
|
||
|
red sky
|
||
|
blue sea
|
||
|
black heart
|
||
|
yellow belley
|
||
|
green grass
|
||
|
) ;
|
||
|
|
||
|
ok addData($db1, %data), " add data to db1" ;
|
||
|
ok addData($db2, %data), " add data to db2" ;
|
||
|
|
||
|
undef $db1 ;
|
||
|
undef $db2 ;
|
||
|
|
||
|
# now rename
|
||
|
cmp_ok BerkeleyDB::db_rename(-Filename => $Dfile, -Newname => $Dfile2),
|
||
|
'==', 0, " rename file to $Dfile2 ok";
|
||
|
|
||
|
my $db3 = new BerkeleyDB::Hash -Filename => $Dfile2,
|
||
|
-Subname => "fred" ;
|
||
|
isa_ok $db3, 'BerkeleyDB::Hash', " verify rename"
|
||
|
or diag "$! $BerkeleyDB::Error";
|
||
|
|
||
|
|
||
|
# TODO add rename with no subname & txn
|
||
|
}
|
||
|
|
||
|
{
|
||
|
title "verify";
|
||
|
|
||
|
my $lex = new LexFile $Dfile, $Dfile2 ;
|
||
|
|
||
|
my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
|
||
|
-Subname => "fred" ,
|
||
|
-Flags => DB_CREATE ;
|
||
|
isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
|
||
|
|
||
|
# Add a k/v pair
|
||
|
my %data = qw(
|
||
|
red sky
|
||
|
blue sea
|
||
|
black heart
|
||
|
yellow belley
|
||
|
green grass
|
||
|
) ;
|
||
|
|
||
|
ok addData($db1, %data), " added data ok" ;
|
||
|
|
||
|
undef $db1 ;
|
||
|
|
||
|
# now verify
|
||
|
cmp_ok BerkeleyDB::db_verify(-Filename => $Dfile,
|
||
|
-Subname => "fred",
|
||
|
), '==', 0, " verify ok";
|
||
|
|
||
|
# now verify & dump
|
||
|
cmp_ok BerkeleyDB::db_verify(-Filename => $Dfile,
|
||
|
-Subname => "fred",
|
||
|
-Outfile => $Dfile2,
|
||
|
), '==', 0, " verify and dump ok";
|
||
|
|
||
|
}
|
||
|
|
||
|
# db_remove with env
|
||
|
|