From e3391a14547d5d53380530ab4ff0758241774e33 Mon Sep 17 00:00:00 2001
From: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Date: Thu, 22 Jul 2021 10:37:26 +0100
Subject: [PATCH] Bug 22690: (QA follow-up) Add relationships to linktracker

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
---
 .../data/mysql/atomicupdate/bug_22690.perl    | 21 +++++++++++++++++++
 installer/data/mysql/kohastructure.sql        |  5 ++++-
 2 files changed, 25 insertions(+), 1 deletion(-)
 create mode 100644 installer/data/mysql/atomicupdate/bug_22690.perl

diff --git a/installer/data/mysql/atomicupdate/bug_22690.perl b/installer/data/mysql/atomicupdate/bug_22690.perl
new file mode 100644
index 0000000000..0a36065330
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_22690.perl
@@ -0,0 +1,21 @@
+$DBversion = 'XXX'; # will be replaced by the RM
+if( CheckVersion( $DBversion ) ) {
+    
+    unless( foreign_key_exists( 'linktracker', 'linktracker_biblio_ibfk' ) ) {
+        $dbh->do(q{ UPDATE linktracker SET biblionumber = NULL WHERE biblionumber NOT IN (SELECT biblionumber FROM biblio) });
+        $dbh->do(q{ ALTER TABLE linktracker ADD CONSTRAINT `linktracker_biblio_ibfk` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE SET NULL });
+    }
+
+    unless( foreign_key_exists( 'linktracker', 'linktracker_item_ibfk' ) ) {
+        $dbh->do(q{ UPDATE linktracker SET itemnumber = NULL WHERE itemnumber NOT IN (SELECT itemnumber FROM items) });
+        $dbh->do(q{ ALTER TABLE linktracker ADD CONSTRAINT `linktracker_item_ibfk` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE SET NULL ON UPDATE SET NULL });
+    }
+
+    unless( foreign_key_exists( 'linktracker', 'linktracker_borrower_ibfk' ) ) {
+        $dbh->do(q{ UPDATE linktracker SET borrowernumber = NULL WHERE borrowernumber NOT IN (SELECT borrowernumber FROM borrowers) });
+        $dbh->do(q{ ALTER TABLE linktracker ADD CONSTRAINT `linktracker_borrower_ibfk` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE SET NULL });
+    }
+
+    # Always end with this (adjust the bug info)
+    NewVersion( $DBversion, 22690, "Add constraints to linktracker table");
+}
diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql
index 58dadc1541..47088bddee 100644
--- a/installer/data/mysql/kohastructure.sql
+++ b/installer/data/mysql/kohastructure.sql
@@ -3354,7 +3354,10 @@ CREATE TABLE `linktracker` (
   KEY `bibidx` (`biblionumber`),
   KEY `itemidx` (`itemnumber`),
   KEY `borridx` (`borrowernumber`),
-  KEY `dateidx` (`timeclicked`)
+  KEY `dateidx` (`timeclicked`),
+  CONSTRAINT `linktracker_biblio_ibfk` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE SET NULL,
+  CONSTRAINT `linktracker_item_ibfk` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE SET NULL ON UPDATE SET NULL,
+  CONSTRAINT `linktracker_borrower_ibfk` FOREIGN KEY (`borrowernumber`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE SET NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 /*!40101 SET character_set_client = @saved_cs_client */;
 
-- 
2.20.1