Bug 20754: DB revision to remove double accepted shares
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Fri, 4 May 2018 08:42:38 +0000 (10:42 +0200)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 6 Apr 2020 11:25:30 +0000 (12:25 +0100)
[Originally submitted for bug 11943, parked at 20754.]
[Attempt to revive it now.]

Although it is no problem to have them, we could do a cleanup.
This patch just removes duplicate rows from the table.

Note: I considered adding a unique index like:
    ALTER TABLE virtualshelfshares ADD UNIQUE INDEX (shelfnumber, borrowernumber, invitekey);
But the possible NULL values in borrowernumber and/or invitekey require
additional code changes. So I left it alone.

Test plan:
[1] Create two records with same borrowernumber and shelfnumber in the shares
    table, if not present already.
[2] Run updatedatabase.pl

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

installer/data/mysql/atomicupdate/bug20754.perl [new file with mode: 0644]

diff --git a/installer/data/mysql/atomicupdate/bug20754.perl b/installer/data/mysql/atomicupdate/bug20754.perl
new file mode 100644 (file)
index 0000000..b819674
--- /dev/null
@@ -0,0 +1,11 @@
+$DBversion = 'XXX';  # will be replaced by the RM
+if( CheckVersion( $DBversion ) ) {
+    # From: https://stackoverflow.com/questions/3311903/remove-duplicate-rows-in-mysql
+    $dbh->do(q|
+DELETE a
+FROM virtualshelfshares as a, virtualshelfshares as b
+WHERE a.id < b.id AND a.borrowernumber IS NOT NULL AND a.borrowernumber=b.borrowernumber AND a.shelfnumber=b.shelfnumber
+    |);
+    SetVersion( $DBversion );
+    print "Upgrade to $DBversion done (Bug 20754: Remove double accepted list shares)\n";
+}