From ba024f7f447e11969fc9e0870d505fbbad305411 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 --- installer/data/mysql/updatedatabase.pl | 51 ++++++++++++++++++++++++++++++++ 1 files changed, 51 insertions(+), 0 deletions(-) diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 01472d7..0872d66 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -37,6 +37,7 @@ use Getopt::Long; use C4::Context; use C4::Installer; use C4::Dates; +use Koha::Database; use MARC::Record; use MARC::File::XML ( BinaryEncoding => 'utf8' ); @@ -8551,6 +8552,56 @@ if (CheckVersion($DBversion)) { SetVersion($DBversion); } +$DBversion = "3.17.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); +} + =head1 FUNCTIONS =head2 TableExists($table) -- 1.7.2.5