summaryrefslogtreecommitdiff
path: root/lib/AniDB/Datastore.pm
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2016-10-18 19:14:08 +0100
committerdakkar <dakkar@thenautilus.net>2016-10-18 19:26:29 +0100
commit3ca733caedbd006db988423fac135aecd81ba5d1 (patch)
tree5b41058b3958e99e3db720c84b27e14a53c270bf /lib/AniDB/Datastore.pm
parentfix Moo / experimental order (diff)
downloadanidb-renamer-3ca733caedbd006db988423fac135aecd81ba5d1.tar.gz
anidb-renamer-3ca733caedbd006db988423fac135aecd81ba5d1.tar.bz2
anidb-renamer-3ca733caedbd006db988423fac135aecd81ba5d1.zip
datastore has and passes tests
Diffstat (limited to 'lib/AniDB/Datastore.pm')
-rw-r--r--lib/AniDB/Datastore.pm59
1 files changed, 30 insertions, 29 deletions
diff --git a/lib/AniDB/Datastore.pm b/lib/AniDB/Datastore.pm
index 41602e6..d5f61b6 100644
--- a/lib/AniDB/Datastore.pm
+++ b/lib/AniDB/Datastore.pm
@@ -1,18 +1,17 @@
package AniDB::Datastore;
use 5.024;
-use experimental 'signatures';
use Moo;
-use Path::Tiny;
+use experimental 'signatures';
use Try::Tiny;
use JSON::MaybeXS qw(encode_json decode_json);
use namespace::clean;
has database => ( is => 'ro', required => 1 );
-has dbh => ( is => 'ro', lazy => 1 );
+has dbh => ( is => 'lazy' );
sub _build_dbh($self) {
require DBI;
- return DBI->connect(
+ my $dbh = DBI->connect(
'dbi:SQLite:dbname='.$self->database,
'', '',
{
@@ -21,20 +20,20 @@ sub _build_dbh($self) {
PrintError => 0,
},
);
-}
-sub BUILD($self) {
try {
- $self->dbh->selectall_arrayref('SELECT * FROM path_info LIMIT 1');
+ $dbh->selectall_arrayref('SELECT * FROM path_info LIMIT 1');
} catch {
if (/\bno such table\b/) {
my @sql = do { local $/ = ";\n\n"; <DATA> };
- $self->dbh->do($_) for @sql;
+ $dbh->do($_) for @sql;
}
else {
die $_;
}
};
+
+ return $dbh;
}
sub has_changed($self,$path,$stat) {
@@ -42,7 +41,7 @@ sub has_changed($self,$path,$stat) {
# if we don't know about the file, it's definitely changed!
return 1 unless $path_info;
- return (
+ return not(
$path_info->{size} == $stat->size
&& $path_info->{mtime} == $stat->mtime
);
@@ -51,7 +50,8 @@ sub has_changed($self,$path,$stat) {
sub rename($self,$path,$new_path) {
$self->dbh->do(
q{UPDATE path_info SET name=? WHERE name=?},
- $path->stringify,$new_path->stringify,
+ {},
+ $new_path->stringify,$path->stringify,
);
}
@@ -72,21 +72,22 @@ sub full_info_for($self,$path) {
sub path_info_for($self,$path) {
my $ret = $self->dbh->selectall_arrayref(
- qr{SELECT * FROM path_info WHERE name=?},
+ q{SELECT * FROM path_info WHERE name=?},
{ Slice => {} },
$path->stringify,
);
+ return unless $ret && $ret->[0];
return $ret->[0];
}
sub update_path_info($self,$path,$path_info) {
my @binds = (@{$path_info}{qw(size mtime hash)}, $path->stringify);
- return $self->dbh->do(
- qr{UPDATE path_info SET size=?, mtime=?, hash=? WHERE name=?},
+ return 0+$self->dbh->do(
+ q{UPDATE path_info SET size=?, mtime=?, hash=? WHERE name=?},
{},
@binds,
- ) or $self->dbh->do(
- qr{INSERT INTO path_info(size,mtime,hash,name) VALUES (?,?,?,?)},
+ ) || 0+$self->dbh->do(
+ q{INSERT INTO path_info(size,mtime,hash,name) VALUES (?,?,?,?)},
{},
@binds,
);
@@ -94,7 +95,7 @@ sub update_path_info($self,$path,$path_info) {
sub episode_info_for($self,$args) {
my $ret = $self->dbh->selectall_arrayref(
- qr{SELECT json FROM episode_info WHERE hash=? AND size=?},
+ q{SELECT json FROM episode_info WHERE hash=? AND size=?},
{ },
@{$args}{qw(hash size)},
);
@@ -105,22 +106,22 @@ sub episode_info_for($self,$args) {
sub update_episode_info($self,$path_info, $episode_info) {
my $json = encode_json($episode_info);
my @binds = ($json, @{$path_info}{qw(size hash)});
- return $self->dbh->do(
- qr{UPDATE episode_info SET json=? WHERE size=? AND hash=?},
+ return 0+$self->dbh->do(
+ q{UPDATE episode_info SET json=? WHERE size=? AND hash=?},
{},
@binds,
- ) or $self->dbh->do(
- qr{INSERT INTO episode_info(json,size,hash) VALUES (?,?,?)},
+ ) || 0+$self->dbh->do(
+ q{INSERT INTO episode_info(json,size,hash) VALUES (?,?,?)},
{},
@binds,
);
}
-sub anime_info_for($self,$args) {
+sub anime_info_for($self,$episode_info) {
my $ret = $self->dbh->selectall_arrayref(
- qr{SELECT json FROM anime_info WHERE aid=?},
+ q{SELECT json FROM anime_info WHERE aid=?},
{ },
- @{$args}{qw(aid)},
+ @{$episode_info}{qw(aid)},
);
return unless $ret && $ret->[0];
return decode_json($ret->[0][0]);
@@ -128,13 +129,13 @@ sub anime_info_for($self,$args) {
sub update_anime_info($self,$episode_info, $anime_info) {
my $json = encode_json($anime_info);
- my @binds = ($json, $episode_info->{eid});
- return $self->dbh->do(
- qr{UPDATE anime_info SET json=? WHERE eid=?},
+ my @binds = ($json, $episode_info->{aid});
+ return 0+$self->dbh->do(
+ q{UPDATE anime_info SET json=? WHERE aid=?},
{},
@binds,
- ) or $self->dbh->do(
- qr{INSERT INTO anime_info(json,eid) VALUES (?,?)},
+ ) || 0+$self->dbh->do(
+ q{INSERT INTO anime_info(json,aid) VALUES (?,?)},
{},
@binds,
);
@@ -158,6 +159,6 @@ CREATE TABLE episode_info (
);
CREATE TABLE anime_info (
- eid INT PRIMARY KEY,
+ aid INT PRIMARY KEY,
json TEST NOT NULL
);