From 81c9a9c095c4b3e490f17f48ebc7086575c0dfa8 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Mon, 16 May 2011 11:42:04 +0200 Subject: [PATCH] [REVISED] [3.4.X] 5860 Fixing stocknumber index Content-Type: text/plain; charset="utf-8" Fixing code for 3.3.0.42 update. Adding code at end of update script if install past that point already. --- installer/data/mysql/updatedatabase.pl | 29 +++++++++++++++++++++++++---- 1 files changed, 25 insertions(+), 4 deletions(-) diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index f503112..02b3ea2 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -4216,13 +4216,27 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { } $DBversion = '3.03.00.042'; -if (C4::Context->preference("Version") < TransformToNum($DBversion) && $original_version < TransformToNum("3.02.06.001")) { - $dbh->do("ALTER TABLE `items` DROP INDEX `itemsstocknumberidx`;"); - $dbh->do("ALTER TABLE items ADD INDEX itemstocknumberidx (stocknumber);"); - print "Upgrade to $DBversion done (Change items.stocknumber to be not unique)\n"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + stocknumber_checker(); + print "Upgrade to $DBversion done (5860 Index itemstocknumber)\n"; SetVersion ($DBversion); } +sub stocknumber_checker { #code reused later on + my @row; + #drop the obsolete itemSStocknumber idx if it exists + @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemsstocknumberidx'"); + $dbh->do("ALTER TABLE `items` DROP INDEX `itemsstocknumberidx`;") if @row; + + #check itemstocknumber idx; remove it if it is unique + @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemstocknumberidx' AND non_unique=0"); + $dbh->do("ALTER TABLE `items` DROP INDEX `itemstocknumberidx`;") if @row; + + #add itemstocknumber index non-unique IF it still not exists + @row = $dbh->selectrow_array("SHOW INDEXES FROM items WHERE key_name='itemstocknumberidx'"); + $dbh->do("ALTER TABLE items ADD INDEX itemstocknumberidx (stocknumber);") unless @row; +} + $DBversion = "3.03.00.043"; if (C4::Context->preference("Version") < TransformToNum($DBversion)) { @@ -4323,6 +4337,13 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { SetVersion ($DBversion); } +$DBversion = '3.04.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + #follow up fix 5860: some installs already past 3.3.0.42 + stocknumber_checker(); + print "Upgrade to $DBversion done (Fix for stocknumber index)\n"; + SetVersion ($DBversion); +} =head1 FUNCTIONS -- 1.6.0.6