Bug 21079: DBRev 18.06.00.056

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
Nick Clemens 2018-11-08 15:35:50 +00:00
parent 0372a9e95e
commit ff2040d9dc
3 changed files with 101 additions and 100 deletions

View File

@ -29,7 +29,7 @@ use vars qw{ $VERSION };
# - #4 : the developer version. The 4th number is the database subversion.
# used by developers when the database changes. updatedatabase take care of the changes itself
# and is automatically called by Auth.pm when needed.
$VERSION = "18.06.00.055";
$VERSION = "18.06.00.056";
sub version {
return $VERSION;

View File

@ -1,99 +0,0 @@
$DBversion = 'XXX'; # will be replaced by the RM
if( CheckVersion( $DBversion ) ) {
# All attributes we're potentially interested in
my $ff_req = $dbh->selectall_arrayref(
'SELECT a.illrequest_id, a.type, a.value '.
'FROM illrequests r, illrequestattributes a '.
'WHERE r.illrequest_id = a.illrequest_id '.
'AND r.backend = "FreeForm"',
{ Slice => {} }
);
# Before we go any further, identify whether we've done
# this before, we test for the presence of "container_title"
# We stop as soon as we find one
foreach my $req(@{$ff_req}) {
if ($req->{type} eq 'container_title') {
warn "Upgrade already carried out";
}
}
# Transform into a hashref with the key of the request ID
my $requests = {};
foreach my $request(@{$ff_req}) {
my $id = $request->{illrequest_id};
if (!exists $requests->{$id}) {
$requests->{$id} = {};
}
$requests->{$id}->{$request->{type}} = $request->{value};
}
# Transform any article requests
my $transformed = {};
foreach my $id(keys %{$requests}) {
if (lc($requests->{$id}->{type}) eq 'article') {
$transformed->{$id} = $requests->{$id};
$transformed->{$id}->{type} = 'article';
$transformed->{$id}->{container_title} = $transformed->{$id}->{title}
if defined $transformed->{$id}->{title} &&
length $transformed->{$id}->{title} > 0;
$transformed->{$id}->{title} = $transformed->{$id}->{article_title}
if defined $transformed->{$id}->{article_title} &&
length $transformed->{$id}->{article_title} > 0;
$transformed->{$id}->{author} = $transformed->{$id}->{article_author}
if defined $transformed->{$id}->{article_author} &&
length $transformed->{$id}->{article_author} > 0;
$transformed->{$id}->{pages} = $transformed->{$id}->{article_pages}
if defined $transformed->{$id}->{article_pages} &&
length $transformed->{$id}->{article_pages} > 0;
}
}
# Now write back the transformed data
# Rather than selectively replace, we just remove all attributes we've
# transformed and re-write them
my @changed = keys %{$transformed};
my $changed_str = join(',', @changed);
if (scalar @changed > 0) {
my ($raise_error) = $dbh->{RaiseError};
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
eval {
my $del = $dbh->do(
"DELETE FROM illrequestattributes ".
"WHERE illrequest_id IN ($changed_str)"
);
foreach my $reqid(keys %{$transformed}) {
my $attr = $transformed->{$reqid};
foreach my $key(keys %{$attr}) {
my $sth = $dbh->prepare(
'INSERT INTO illrequestattributes '.
'(illrequest_id, type, value) '.
'VALUES '.
'(?, ?, ?)'
);
$sth->execute(
$reqid,
$key,
$attr->{$key}
);
}
}
$dbh->commit;
};
if ($@) {
warn "Upgrade to $DBversion failed: $@\n";
eval { $dbh->rollback };
} else {
SetVersion( $DBversion );
print "Upgrade to $DBversion done (Bug 21079 - Unify metadata schema across backends)\n";
}
$dbh->{AutoCommit} = 1;
$dbh->{RaiseError} = $raise_error;
}
}

View File

@ -16934,6 +16934,106 @@ if( CheckVersion( $DBversion ) ) {
print "Upgrade to $DBversion done (Bug 12365: Add column issuingrules.note)\n";
}
$DBversion = '18.06.00.056';
if( CheckVersion( $DBversion ) ) {
# All attributes we're potentially interested in
my $ff_req = $dbh->selectall_arrayref(
'SELECT a.illrequest_id, a.type, a.value '.
'FROM illrequests r, illrequestattributes a '.
'WHERE r.illrequest_id = a.illrequest_id '.
'AND r.backend = "FreeForm"',
{ Slice => {} }
);
# Before we go any further, identify whether we've done
# this before, we test for the presence of "container_title"
# We stop as soon as we find one
foreach my $req(@{$ff_req}) {
if ($req->{type} eq 'container_title') {
warn "Upgrade already carried out";
}
}
# Transform into a hashref with the key of the request ID
my $requests = {};
foreach my $request(@{$ff_req}) {
my $id = $request->{illrequest_id};
if (!exists $requests->{$id}) {
$requests->{$id} = {};
}
$requests->{$id}->{$request->{type}} = $request->{value};
}
# Transform any article requests
my $transformed = {};
foreach my $id(keys %{$requests}) {
if (lc($requests->{$id}->{type}) eq 'article') {
$transformed->{$id} = $requests->{$id};
$transformed->{$id}->{type} = 'article';
$transformed->{$id}->{container_title} = $transformed->{$id}->{title}
if defined $transformed->{$id}->{title} &&
length $transformed->{$id}->{title} > 0;
$transformed->{$id}->{title} = $transformed->{$id}->{article_title}
if defined $transformed->{$id}->{article_title} &&
length $transformed->{$id}->{article_title} > 0;
$transformed->{$id}->{author} = $transformed->{$id}->{article_author}
if defined $transformed->{$id}->{article_author} &&
length $transformed->{$id}->{article_author} > 0;
$transformed->{$id}->{pages} = $transformed->{$id}->{article_pages}
if defined $transformed->{$id}->{article_pages} &&
length $transformed->{$id}->{article_pages} > 0;
}
}
# Now write back the transformed data
# Rather than selectively replace, we just remove all attributes we've
# transformed and re-write them
my @changed = keys %{$transformed};
my $changed_str = join(',', @changed);
if (scalar @changed > 0) {
my ($raise_error) = $dbh->{RaiseError};
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
eval {
my $del = $dbh->do(
"DELETE FROM illrequestattributes ".
"WHERE illrequest_id IN ($changed_str)"
);
foreach my $reqid(keys %{$transformed}) {
my $attr = $transformed->{$reqid};
foreach my $key(keys %{$attr}) {
my $sth = $dbh->prepare(
'INSERT INTO illrequestattributes '.
'(illrequest_id, type, value) '.
'VALUES '.
'(?, ?, ?)'
);
$sth->execute(
$reqid,
$key,
$attr->{$key}
);
}
}
$dbh->commit;
};
if ($@) {
warn "Upgrade to $DBversion failed: $@\n";
eval { $dbh->rollback };
} else {
SetVersion( $DBversion );
print "Upgrade to $DBversion done (Bug 21079 - Unify metadata schema across backends)\n";
}
$dbh->{AutoCommit} = 1;
$dbh->{RaiseError} = $raise_error;
}
}
# SEE bug 13068
# if there is anything in the atomicupdate, read and execute it.