BerkeleyDB
view release on metacpan or search on metacpan
ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
-Flags => DB_CREATE ;
# associate primary with secondary
ok $primary->associate($secondary, \&sec_key_mult) == 0;
# add data to the primary
my %data = (
"red" => "flag",
"green" => "house",
"blue" => "sea",
"foo" => "",
"bar" => "hello,goodbye",
) ;
my $ret = 0 ;
while (($k, $v) = each %data) {
my $r = $primary->db_put($k, $v) ;
$ret += $r;
}
ok $ret == 0 ;
# check the records in the secondary
is countRecords($secondary), 5 ;
ok $secondary->db_get("house", $v) == 0;
ok $v eq "house";
ok $secondary->db_get("sea", $v) == 0;
ok $v eq "sea";
ok $secondary->db_get("flag", $v) == 0;
ok $v eq "flag";
ok $secondary->db_get("hello", $v) == 0;
ok $v eq "hello,goodbye";
ok $secondary->db_get("goodbye", $v) == 0;
ok $v eq "hello,goodbye";
# pget to primary database is illegal
ok $primary->db_pget('red', $pk, $v) != 0 ;
# pget to secondary database is ok
ok $secondary->db_pget('house', $pk, $v) == 0 ;
ok $pk eq 'green';
ok $v eq 'house';
# pget to secondary database is ok
ok $secondary->db_pget('hello', $pk, $v) == 0 ;
ok $pk eq 'bar';
ok $v eq 'hello,goodbye';
# pget to DB_GET_BOTH from secondary database
$k = 'house';
$pk = 'green';
ok $secondary->db_pget($k, $pk, $v, DB_GET_BOTH) == 0 ;
ok $k eq 'house';
ok $v eq 'house';
ok my $p_cursor = $primary->db_cursor();
ok my $s_cursor = $secondary->db_cursor();
# c_get from primary
$k = 'green';
ok $p_cursor->c_get($k, $v, DB_SET) == 0;
ok $k eq 'green';
ok $v eq 'house';
# c_get from secondary
$k = 'sea';
ok $s_cursor->c_get($k, $v, DB_SET) == 0;
ok $k eq 'sea';
ok $v eq 'sea';
# c_pget from primary database should fail
$k = 1;
ok $p_cursor->c_pget($k, $pk, $v, DB_FIRST) != 0;
# c_pget from secondary database
$k = 'flag';
ok $s_cursor->c_pget($k, $pk, $v, DB_SET) == 0;
ok $k eq 'flag';
ok $pk eq 'red';
ok $v eq 'flag';
# c_pget with DB_GET_BOTH from secondary database
$k = 'house';
$pk = 'green';
ok $s_cursor->c_pget($k, $pk, $v, DB_GET_BOTH) == 0;
ok $k eq 'house';
ok $v eq 'house';
# check put to secondary is illegal
ok $secondary->db_put("tom", "dick") != 0;
is countRecords($secondary), 5 ;
# delete from primary
ok $primary->db_del("green") == 0 ;
is countRecords($primary), 4 ;
# check has been deleted in secondary
ok $secondary->db_get("house", $v) != 0;
is countRecords($secondary), 4 ;
# delete from secondary
ok $secondary->db_del('flag') == 0 ;
is countRecords($secondary), 3 ;
# check deleted from primary
ok $primary->db_get("red", $v) != 0;
is countRecords($primary), 3 ;
}
( run in 0.676 second using v1.01-cache-2.11-cpan-39bf76dae61 )