summaryrefslogtreecommitdiff
path: root/lib/VNDB/DB
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2009-12-05 13:22:53 +0100
committerYorhel <git@yorhel.nl>2009-12-05 13:22:53 +0100
commit7554f305ae27091ccff6a692180a5af7282df766 (patch)
treee0c93d34c1748b4ad58040550665eb5427df156b /lib/VNDB/DB
parentfbcadd3ceb50a97dab4dd5cd284cc35e8b89b3b4 (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.pm41
-rw-r--r--lib/VNDB/DB/Producers.pm30
-rw-r--r--lib/VNDB/DB/Releases.pm26
-rw-r--r--lib/VNDB/DB/VN.pm26
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;