diff options
author | Yorhel <git@yorhel.nl> | 2009-12-05 13:22:53 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2009-12-05 13:22:53 +0100 |
commit | 7554f305ae27091ccff6a692180a5af7282df766 (patch) | |
tree | e0c93d34c1748b4ad58040550665eb5427df156b /lib/VNDB/DB | |
parent | fbcadd3ceb50a97dab4dd5cd284cc35e8b89b3b4 (diff) |
Merged db[VN|Producer|Release][Edit|Add] into dbItemEdit and dbItemAdd
And also changed the way the item_table.latest column was updated: it is
now only updated after the revision insert has completed, making it
easier to write trigger functions in SQL.
Diffstat (limited to 'lib/VNDB/DB')
-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 |
4 files changed, 36 insertions, 87 deletions
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; |