Bug 12488: Make bulkmarcimport.pl -d use DELETE instead of TRUNCATE
authorMagnus Enger <magnus@libriotech.no>
Mon, 11 Feb 2019 10:07:21 +0000 (11:07 +0100)
committerLucas Gass <lucas@bywatersolutions.com>
Tue, 5 Mar 2019 15:26:12 +0000 (15:26 +0000)
On MySQL >= 5.5 bulkmarcimport.pl with the -d (delete) switch gives
an error like "Cannot truncate a table referenced in a foreign
key constraint". This patch proposes to replace the offending
TRUNCATE with DELETE. Auto incerement counters are reset to 1 to
preserve the functionality from TRUNCATE.

To test:
- Make sure you havae a test database with some records and items
- Run bulkmarcimport.pl with the -d switch
- Observe the error described above
- Apply this patch
- Run bulkmarcimport.pl with the -d switch again
- Observe the lack of an error
- Verify that the newly imported records and items have biblionumber
  and itemnumbers starting with 1

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit b7b4694666657f57aaf61d091ed34c9f754a11e3)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
(cherry picked from commit 1e65ab6f7fe986979efedea4577f29b8c1e3723e)

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>

misc/migration_tools/bulkmarcimport.pl

index d820d3e..bd80a69 100755 (executable)
@@ -176,9 +176,12 @@ if ($fk_off) {
 if ($delete) {
        if ($biblios){
        print "deleting biblios\n";
-       $dbh->do("truncate biblio");
-       $dbh->do("truncate biblioitems");
-       $dbh->do("truncate items");
+        $dbh->do("DELETE FROM biblio");
+        $dbh->do("ALTER TABLE biblio AUTO_INCREMENT = 1");
+        $dbh->do("DELETE FROM biblioitems");
+        $dbh->do("ALTER TABLE biblioitems AUTO_INCREMENT = 1");
+        $dbh->do("DELETE FROM items");
+        $dbh->do("ALTER TABLE items AUTO_INCREMENT = 1");
        }
        else {
        print "deleting authorities\n";