# -*-perl-*-
use ObjStore;
package MyHV;
use base 'ObjStore::HV';
package MyAV;
use base 'ObjStore::AV';
package main;
use Test;
BEGIN { plan test => 9 }
use ObjStore ':ALL';
use lib './t';
use test;
&open_db;
my $junk = {
'nums' => [ 1..13 ],
'strs' => { qw(a b c d e f g h), i => [ 'a', 1 ] },
};
# see if transient works..
eval {
for my $t (qw(ObjStore::AV ObjStore::HV)) {
my $x = $t->new('transient');
my $nt = $t;
$nt =~ s/^ObjStore::/My/;
bless $x, $nt;
}
};
ok $@||'', '', 'transient failed';
begin 'update', sub {
# see if transient works..
eval {
for my $t (qw(ObjStore::AV ObjStore::HV)) {
my $x = $t->new('transient');
my $nt = $t;
$nt =~ s/^ObjStore::/My/;
bless $x, $nt;
}
};
ok $@||'', '', 'transient failed';
my $john = $db->root('John');
die "no db" if !$john;
$db->get_default_segment_size;
$db->get_default_segment->set_comment("default segment");
my $empty = $db->create_segment('1segment');
ok($empty->database_of->get_id, $db->get_id);
for (qw(as_used read write)) { $empty->set_lock_whole_segment($_); }
for (qw(segment page stream)) {
$empty->set_fetch_policy($_, 8192);
}
$empty->lock_into_cache;
$empty->unlock_from_cache;
$empty->return_memory(1);
$empty->set_size($empty->size);
$empty->unused_space;
ok(! $empty->is_deleted);
$empty->destroy;
ok($empty->is_deleted);
if (exists $john->{junk_seg}) {
delete $john->{junk_in_seg};
}
$seg = $db->create_segment('junk');
ok($seg->get_comment, 'junk');
$john->{junk_seg} = $seg->get_number();
my $h = new ObjStore::HV($seg, 10);
$john->{junk_in_seg} = $h;
# fill up the segment with junk
for (keys %$junk) { $h->{$_} = $junk->{$_}; }
$h->{sptr} = $h->{strs}->new_ref($h, 'hard');
# segment is determined by OSSVPV, not from OSSV
my $nseg = $h->segment_of;
ok($nseg->get_number(), $seg->get_number());
# double-check the obvious
$nseg = $h->{nums}->segment_of;
ok($nseg->get_number(), $seg->get_number());
};
die if $@;