summaryrefslogtreecommitdiff
path: root/lib
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
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')
-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
-rw-r--r--lib/VNDB/Handler/Producers.pm6
-rw-r--r--lib/VNDB/Handler/Releases.pm4
-rw-r--r--lib/VNDB/Handler/VNEdit.pm6
7 files changed, 44 insertions, 95 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;
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,