diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | lib/VNDB/DB/Misc.pm | 41 | ||||
-rw-r--r-- | lib/VNDB/DB/Producers.pm | 30 | ||||
-rw-r--r-- | lib/VNDB/DB/Releases.pm | 26 | ||||
-rw-r--r-- | lib/VNDB/DB/VN.pm | 26 | ||||
-rw-r--r-- | lib/VNDB/Handler/Producers.pm | 6 | ||||
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 4 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNEdit.pm | 6 |
8 files changed, 45 insertions, 95 deletions
@@ -7,6 +7,7 @@ git - ? - Allow hiding of NSFW cover even if NSFW warning is disabled - Removed /g/debug - Replaced recursive stored procedures with WITH .. SELECT queries + - Merged db[VN|Producer|Release][Edit|Add] into dbItemEdit and dbItemAdd 2.9 - 2009-11-16 - Fixed another bug with the calculation of tags_vn_bayesian.spoiler diff --git a/lib/VNDB/DB/Misc.pm b/lib/VNDB/DB/Misc.pm index e819a1a3..ec8d375e 100644 --- a/lib/VNDB/DB/Misc.pm +++ b/lib/VNDB/DB/Misc.pm @@ -6,7 +6,7 @@ use warnings; use Exporter 'import'; our @EXPORT = qw| - dbStats dbRevisionInsert dbItemInsert dbRevisionGet dbItemMod dbRandomQuote + dbStats dbItemEdit dbItemAdd dbRevisionGet dbItemMod dbRandomQuote |; @@ -21,13 +21,10 @@ sub dbStats { # Inserts a new revision and updates the item to point to this revision -# This function leaves the DB in an inconsistent state, the actual revision -# will have to be inserted directly after calling this function, otherwise -# the commit will fail. -# Arguments: type [vrp], item ID, edit summary +# Arguments: type [vrp], item ID, %options->{ editsum uid + db[item]RevisionInsert } # Returns: local revision, global revision -sub dbRevisionInsert { - my($self, $type, $iid, $editsum, $uid) = @_; +sub dbItemEdit { + my($self, $type, $iid, %o) = @_; my $table = {qw|v vn r releases p producers|}->{$type}; @@ -42,37 +39,47 @@ sub dbRevisionInsert { LIMIT 1 )) RETURNING id, rev|, - $type, $uid||$self->authInfo->{id}, $self->reqIP, $editsum, + $type, $o{uid}||$self->authInfo->{id}, $self->reqIP, $o{editsum}, $table, $type, $iid ); - $self->dbExec(q|UPDATE !s SET latest = ? WHERE id = ?|, $table, $c->{id}, $iid); + $self->dbVNRevisionInsert( $c->{id}, $iid, \%o) if $type eq 'v'; + $self->dbProducerRevisionInsert($c->{id}, $iid, \%o) if $type eq 'p'; + $self->dbReleaseRevisionInsert( $c->{id}, $iid, \%o) if $type eq 'r'; + $self->dbExec(q|UPDATE !s SET latest = ? WHERE id = ?|, $table, $c->{id}, $iid); return ($c->{rev}, $c->{id}); } -# Comparable to RevisionInsert, but creates a new item with a corresponding -# change. Same things about inconsistent state, etc. -# Argumments: type [vrp], edit summary, [uid] +# Comparable to dbItemEdit(), but creates a new item with a corresponding revision. +# Argumments: type [vrp] + same option hash as dbItemEdit() # Returns: item id, global revision -sub dbItemInsert { - my($self, $type, $editsum, $uid) = @_; +sub dbItemAdd { + my($self, $type, %o) = @_; + + my $table = {qw|v vn r releases p producers|}->{$type}; my $cid = $self->dbRow(q| INSERT INTO changes (type, requester, ip, comments) VALUES (?, ?, ?, ?) RETURNING id|, - $type, $uid||$self->authInfo->{id}, $self->reqIP, $editsum + $type, $o{uid}||$self->authInfo->{id}, $self->reqIP, $o{editsum} )->{id}; my $iid = $self->dbRow(q| INSERT INTO !s (latest) - VALUES (?) + VALUES (0) RETURNING id|, - {qw|v vn r releases p producers|}->{$type}, $cid + $table )->{id}; + $self->dbVNRevisionInsert( $cid, $iid, \%o) if $type eq 'v'; + $self->dbProducerRevisionInsert($cid, $iid, \%o) if $type eq 'p'; + $self->dbReleaseRevisionInsert( $cid, $iid, \%o) if $type eq 'r'; + + $self->dbExec(q|UPDATE !s SET latest = ? WHERE id = ?|, $table, $cid, $iid); + return ($iid, $cid); } diff --git a/lib/VNDB/DB/Producers.pm b/lib/VNDB/DB/Producers.pm index 0539634c..4a666350 100644 --- a/lib/VNDB/DB/Producers.pm +++ b/lib/VNDB/DB/Producers.pm @@ -5,7 +5,7 @@ use strict; use warnings; use Exporter 'import'; -our @EXPORT = qw|dbProducerGet dbProducerEdit dbProducerAdd|; +our @EXPORT = qw|dbProducerGet dbProducerRevisionInsert|; # options: results, page, id, search, char, rev @@ -100,30 +100,11 @@ sub dbProducerGet { } -# arguments: id, %options ->( editsum uid + insert_rev ) -# returns: ( local revision, global revision ) -sub dbProducerEdit { - my($self, $pid, %o) = @_; - my($rev, $cid) = $self->dbRevisionInsert('p', $pid, $o{editsum}, $o{uid}); - insert_rev($self, $cid, $pid, \%o); - return ($rev, $cid); -} - - -# arguments: %options ->( editsum uid + insert_rev ) -# returns: ( item id, global revision ) -sub dbProducerAdd { - my($self, %o) = @_; - my($pid, $cid) = $self->dbItemInsert('p', $o{editsum}, $o{uid}); - insert_rev($self, $cid, $pid, \%o); - return ($pid, $cid); -} - - -# helper function, inserts a producer revision -# Arguments: global revision, item id, { columns in producers_rev }, relations -sub insert_rev { +# inserts a producer revision, called from dbItemEdit() or dbItemAdd() +# Arguments: global revision, item id, { columns in producers_rev + relations }, +sub dbProducerRevisionInsert { my($self, $cid, $pid, $o) = @_; + $self->dbExec(q| INSERT INTO producers_rev (id, pid, name, original, website, l_wp, type, lang, "desc", alias) VALUES (!l)|, @@ -139,3 +120,4 @@ sub insert_rev { 1; + diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm index c57b7bc2..161242bc 100644 --- a/lib/VNDB/DB/Releases.pm +++ b/lib/VNDB/DB/Releases.pm @@ -7,7 +7,7 @@ use POSIX 'strftime'; use Exporter 'import'; use VNDB::Func 'gtintype'; -our @EXPORT = qw|dbReleaseGet dbReleaseAdd dbReleaseEdit|; +our @EXPORT = qw|dbReleaseGet dbReleaseRevisionInsert|; # Options: id vid rev unreleased page results what date media sort reverse @@ -156,29 +156,9 @@ sub dbReleaseGet { } -# arguments: id, %options ->( editsum uid + insert_rev ) -# returns: ( local revision, global revision ) -sub dbReleaseEdit { - my($self, $rid, %o) = @_; - my($rev, $cid) = $self->dbRevisionInsert('r', $rid, $o{editsum}, $o{uid}); - insert_rev($self, $cid, $rid, \%o); - return ($rev, $cid); -} - - -# arguments: %options ->( editsum uid + insert_rev ) -# returns: ( item id, global revision ) -sub dbReleaseAdd { - my($self, %o) = @_; - my($rid, $cid) = $self->dbItemInsert('r', $o{editsum}, $o{uid}); - insert_rev($self, $cid, $rid, \%o); - return ($rid, $cid); -} - - -# helper function, inserts a producer revision +# inserts a release revision, called from dbItemEdit() or dbItemAdd() # Arguments: global revision, item id, { columns in releases_rev + languages + vn + producers + media + platforms } -sub insert_rev { +sub dbReleaseRevisionInsert { my($self, $cid, $rid, $o) = @_; $self->dbExec(q| diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm index 8bd7b0f8..a5df65f2 100644 --- a/lib/VNDB/DB/VN.pm +++ b/lib/VNDB/DB/VN.pm @@ -7,7 +7,7 @@ use Exporter 'import'; use VNDB::Func 'gtintype'; use Encode 'decode_utf8'; -our @EXPORT = qw|dbVNGet dbVNAdd dbVNEdit dbVNImageId dbVNCache dbScreenshotAdd dbScreenshotGet dbScreenshotRandom|; +our @EXPORT = qw|dbVNGet dbVNRevisionInsert dbVNImageId dbVNCache dbScreenshotAdd dbScreenshotGet dbScreenshotRandom|; # Options: id, rev, char, search, lang, platform, tags_include, tags_exclude, results, page, what, sort, reverse @@ -171,32 +171,12 @@ sub dbVNGet { } -# arguments: id, %options ->( editsum uid + insert_rev ) -# returns: ( local revision, global revision ) -sub dbVNEdit { - my($self, $id, %o) = @_; - my($rev, $cid) = $self->dbRevisionInsert('v', $id, $o{editsum}, $o{uid}); - insert_rev($self, $cid, $id, \%o); - return ($rev, $cid); -} - - -# arguments: %options ->( editsum uid + insert_rev ) -# returns: ( item id, global revision ) -sub dbVNAdd { - my($self, %o) = @_; - my($id, $cid) = $self->dbItemInsert('v', $o{editsum}, $o{uid}); - insert_rev($self, $cid, $id, \%o); - return ($id, $cid); -} - - -# helper function, inserts a producer revision +# inserts a visual novel revision, used from dbItemEdit() or dbItemAdd() # Arguments: global revision, item id, { columns in producers_rev + anime + relations + screenshots } # screenshots = [ [ scrid, nsfw, rid ], .. ] # relations = [ [ rel, vid ], .. ] # anime = [ aid, .. ] -sub insert_rev { +sub dbVNRevisionInsert { my($self, $cid, $vid, $o) = @_; $o->{img_nsfw} = $o->{img_nsfw}?1:0; diff --git a/lib/VNDB/Handler/Producers.pm b/lib/VNDB/Handler/Producers.pm index e3473c3c..660c589e 100644 --- a/lib/VNDB/Handler/Producers.pm +++ b/lib/VNDB/Handler/Producers.pm @@ -188,8 +188,8 @@ sub edit { $rev = 1; my $npid = $pid; my $cid; - ($rev, $cid) = $self->dbProducerEdit($pid, %$frm) if $pid; - ($npid, $cid) = $self->dbProducerAdd(%$frm) if !$pid; + ($rev, $cid) = $self->dbItemEdit(p => $pid, %$frm) if $pid; + ($npid, $cid) = $self->dbItemAdd(p => %$frm) if !$pid; # update reverse relations if(!$pid && $#$relations >= 0 || $pid && $frm->{prodrelations} ne $b4{prodrelations}) { @@ -278,7 +278,7 @@ sub _updreverse { my $r = $self->dbProducerGet(id => $i, what => 'extended relations')->[0]; my @newrel = map $_->{id} != $pid ? [ $_->{relation}, $_->{id} ] : (), @{$r->{relations}}; push @newrel, [ $upd{$i}, $pid ] if $upd{$i}; - $self->dbProducerEdit($i, + $self->dbItemEdit(p => $i, relations => \@newrel, editsum => "Reverse relation update caused by revision p$pid.$rev", causedby => $cid, diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm index b699e596..b9d7a277 100644 --- a/lib/VNDB/Handler/Releases.pm +++ b/lib/VNDB/Handler/Releases.pm @@ -358,8 +358,8 @@ sub edit { ); $rev = 1; - ($rev) = $self->dbReleaseEdit($rid, %opts) if !$copy && $rid; - ($rid) = $self->dbReleaseAdd(%opts) if $copy || !$rid; + ($rev) = $self->dbItemEdit(r => $rid, %opts) if !$copy && $rid; + ($rid) = $self->dbItemAdd(r => %opts) if $copy || !$rid; $self->dbVNCache(@$new_vn, map $_->{vid}, @$vn); diff --git a/lib/VNDB/Handler/VNEdit.pm b/lib/VNDB/Handler/VNEdit.pm index ed7068dc..531f39d6 100644 --- a/lib/VNDB/Handler/VNEdit.pm +++ b/lib/VNDB/Handler/VNEdit.pm @@ -79,8 +79,8 @@ sub edit { ); my($nvid, $nrev, $cid) = ($vid, 1); - ($nrev, $cid) = $self->dbVNEdit($vid, %args) if $vid; - ($nvid, $cid) = $self->dbVNAdd(%args) if !$vid; + ($nrev, $cid) = $self->dbItemEdit(v => $vid, %args) if $vid; + ($nvid, $cid) = $self->dbItemAdd(v =>%args) if !$vid; # update reverse relations & relation graph if(!$vid && $#$relations >= 0 || $vid && $frm->{vnrelations} ne $b4{vnrelations}) { @@ -262,7 +262,7 @@ sub _updreverse { my $r = $self->dbVNGet(id => $i, what => 'extended relations anime screenshots')->[0]; my @newrel = map $_->{id} != $vid ? [ $_->{relation}, $_->{id} ] : (), @{$r->{relations}}; push @newrel, [ $upd{$i}, $vid ] if $upd{$i}; - $self->dbVNEdit($i, + $self->dbItemEdit(v => $i, relations => \@newrel, editsum => "Reverse relation update caused by revision v$vid.$rev", causedby => $cid, |