From cd7689478ef6290f57a53cb855dc4e0a664e9066 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 23 Oct 2012 14:48:41 -0400 Subject: [PATCH] Bug 12375 [1] - Update database Signed-off-by: Paul Landers --- installer/data/mysql/updatedatabase.pl | 53 ++++++++++++++++++++++++++++++- 1 files changed, 51 insertions(+), 2 deletions(-) diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 214faa3..b8b3fa5 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -38,7 +38,6 @@ use C4::Context; use C4::Installer; use C4::Dates; use Koha::Database; - use Koha; use MARC::Record; @@ -9897,7 +9896,7 @@ if ( CheckVersion($DBversion) ) { ALTER TABLE search_history ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id); |); print "Upgrade to $DBversion done (Bug 11430: Add primary key for search_history)\n"; - SetVersion($DBversion); + SetVersion ($DBversion); } $DBversion = "3.19.00.016"; @@ -10641,6 +10640,56 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.19.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do(" + ALTER TABLE serial + ADD serialseq_x VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq, + ADD serialseq_y VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_x, + ADD serialseq_z VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_y + "); + + my $schema = Koha::Database->new()->schema(); + my @subscriptions = $schema->resultset('Subscription')->all(); + + foreach my $subscription (@subscriptions) { + my $number_pattern = $subscription->numberpattern(); + + my @splits = split( /\{[XYZ]\}/, $number_pattern->numberingmethod() ); + + my @serials = + $schema->resultset('Serial') + ->search( { subscriptionid => $subscription->subscriptionid() } ); + + foreach my $serial (@serials) { + my $serialseq = $serial->serialseq(); + my ( $x, $y, $z ); + + ## We cannot split on multiple values at once, + ## so let's replace each of those values with __SPLIT__ + if (@splits) { + map( $serialseq =~ s/$_/__SPLIT__/, @splits ); + ( undef, $x, $y, $z ) = split( /__SPLIT__/, $serialseq ); + } + else + { ## Nothing to split on means the only thing in serialseq is {X} + $x = $serialseq; + } + + $serial->update( + { + serialseq_x => $x, + serialseq_y => $y, + serialseq_z => $z, + } + ); + } + } + + print "Upgrade to $DBversion done ( Bug 8956 - Split serials enumeration data into separate fields )\n"; + SetVersion($DBversion); +} + # DEVELOPER PROCESS, search for anything to execute in the db_update directory # SEE bug 13068 -- 1.7.2.5