App-SimpleBackuper
view release on metacpan or search on metacpan
lib/App/SimpleBackuper/DB/FilesTable.pm view on Meta::CPAN
aes_key => $p->unpack(a => 32),
aes_iv => $p->unpack(a => 16),
};
}
return \%version;
}
sub pack {
my($self, $data) = @_;
my $p = $self->packer();
$p->pack(J => 1 => $data->{parent_id});
if(exists $data->{id}) {
$p->pack(J => 1 => $data->{id});
if(exists $data->{name}) {
$p->pack(J => 1 => length($data->{name}));
$p->pack(a => length($data->{name}) => $data->{name});
if(exists $data->{versions}) {
my @versions = map { _pack_version($_) } @{ $data->{versions} };
$p->pack(J => 1 => scalar(@versions));
$p->pack(J => scalar(@versions) => map { length($_) } @versions);
$p->pack(a => '*' => $_) foreach @versions;
}
}
}
return $p->data;
}
sub unpack {
my($self, $data) = @_;
my $p = $self->packer($data);
return {
parent_id => $p->unpack(J => 1),
id => $p->unpack(J => 1),
name => $p->unpack(a => $p->unpack(J => 1)),
versions => [ map {_unpack_version $_} map { $p->unpack(a => $_) } map { $p->unpack(J => 1) } 1 .. $p->unpack(J => 1) ],
};
}
my $find_by_parent_id_name_cache_parent_id = 0;
my %find_by_parent_id_name_cache;
sub find_by_parent_id_name {
my($self, $parent_id, $name) = @_;
if(! $find_by_parent_id_name_cache_parent_id or $find_by_parent_id_name_cache_parent_id != $parent_id) {
%find_by_parent_id_name_cache = map {$_->{name} => $_} map {@$_} $self->find_all({parent_id => $parent_id});
$find_by_parent_id_name_cache_parent_id = $parent_id;
}
return $find_by_parent_id_name_cache{ $name };
}
sub delete {
my $self = shift;
%find_by_parent_id_name_cache = ();
$find_by_parent_id_name_cache_parent_id = 0;
return $self->SUPER::delete(@_);
}
1;
( run in 1.752 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )