5860 Fixing stocknumber index
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Mon, 16 May 2011 08:57:49 +0000 (10:57 +0200)
committerChris Cormack <chrisc@catalyst.net.nz>
Sun, 12 Jun 2011 23:36:33 +0000 (11:36 +1200)
Fixing code for 3.3.0.42 update.
Adding code at end of update script if install past that point already.

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
installer/data/mysql/updatedatabase.pl

index 52951e7..de9806b 100755 (executable)
@@ -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)) {
 
@@ -4332,6 +4346,14 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
     SetVersion($DBversion);
 }
 
+$DBversion = '3.05.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
 
 =head2 DropAllForeignKeys($table)