Bug 13790 [QA Followup] - Disable auto increment on old_issues after pk values are...
[koha-ffzg.git] / installer / data / mysql / updatedatabase.pl
index b4d1953..ec7005e 100755 (executable)
@@ -6,18 +6,18 @@
 # Parts copyright Catalyst IT 2011
 
 # Part of the Koha Library Software www.koha-community.org
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 #
 
 # Bugs/ToDo:
@@ -37,6 +37,7 @@ use Getopt::Long;
 use C4::Context;
 use C4::Installer;
 use C4::Dates;
+use Koha::Database;
 
 use MARC::Record;
 use MARC::File::XML ( BinaryEncoding => 'utf8' );
@@ -57,6 +58,8 @@ my (
     $prefitem,          # preference item in systempreferences table
 );
 
+my $schema = Koha::Database->new()->schema();
+
 my $silent;
 GetOptions(
     's' =>\$silent
@@ -3809,8 +3812,8 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
     print "Upgrade to $DBversion done (3.2.0 general release)\n";
     SetVersion ($DBversion);
 }
-
 # This is the point where 3.2.x and master diverged, we can use $original_version to make sure we don't
+
 # apply updates that have already been done
 
 $DBversion = "3.03.00.001";
@@ -4941,10 +4944,52 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
 
 $DBversion = "3.07.00.029";
 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
-    my $installer = C4::Installer->new();
-    my $full_path = C4::Context->config('intranetdir') . "/installer/data/$installer->{dbms}/atomicupdate/oai_sets.sql";
-    my $error     = $installer->load_sql($full_path);
-    warn $error if $error;
+    $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_descriptions`;});
+    $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_mappings`;});
+    $dbh->do(q{DROP TABLE IF EXISTS `oai_sets_biblios`;});
+    $dbh->do(q{DROP TABLE IF EXISTS `oai_sets`;});
+
+    $dbh->do(q{
+        CREATE TABLE `oai_sets` (
+          `id` int(11) NOT NULL auto_increment,
+          `spec` varchar(80) NOT NULL UNIQUE,
+          `name` varchar(80) NOT NULL,
+          PRIMARY KEY (`id`)
+        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+    });
+
+    $dbh->do(q{
+        CREATE TABLE `oai_sets_descriptions` (
+          `set_id` int(11) NOT NULL,
+          `description` varchar(255) NOT NULL,
+          CONSTRAINT `oai_sets_descriptions_ibfk_1` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+    });
+
+    $dbh->do(q{
+        CREATE TABLE `oai_sets_mappings` (
+          `set_id` int(11) NOT NULL,
+          `marcfield` char(3) NOT NULL,
+          `marcsubfield` char(1) NOT NULL,
+          `marcvalue` varchar(80) NOT NULL,
+          CONSTRAINT `oai_sets_mappings_ibfk_1` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+    });
+
+    $dbh->do(q{
+        CREATE TABLE `oai_sets_biblios` (
+          `biblionumber` int(11) NOT NULL,
+          `set_id` int(11) NOT NULL,
+          PRIMARY KEY (`biblionumber`, `set_id`),
+          CONSTRAINT `oai_sets_biblios_ibfk_1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE,
+          CONSTRAINT `oai_sets_biblios_ibfk_2` FOREIGN KEY (`set_id`) REFERENCES `oai_sets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+    });
+
+    $dbh->do(q{
+        INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OAI-PMH:AutoUpdateSets','0','Automatically update OAI sets when a bibliographic record is created or updated','','YesNo');
+    });
+
     print "Upgrade to $DBversion done (Atomic update for OAI-PMH sets management)\n";
     SetVersion($DBversion);
 }
@@ -9658,15 +9703,21 @@ if(CheckVersion($DBversion)) {
 
 $DBversion = "3.19.00.006";
 if ( CheckVersion($DBversion) ) {
-    $dbh->do(q|SET foreign_key_checks = 0|);;
-    my @tables = $dbh->tables();
-    for my $table ( @tables ) {
-        $dbh->do(qq|ALTER TABLE $table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci|);
+    $dbh->do(q|SET foreign_key_checks = 0|);
+    my $sth = $dbh->table_info( '','','','TABLE' );
+    my ( $cat, $schema, $name, $type, $remarks );
+    while ( ( $cat, $schema, $name, $type, $remarks ) = $sth->fetchrow_array ) {
+        my $table_sth = $dbh->prepare(qq|SHOW CREATE TABLE $name|);
+        $table_sth->execute;
+        my @table = $table_sth->fetchrow_array;
+        unless ( $table[1] =~ /COLLATE=utf8mb4_unicode_ci/ ) { #catches utf8mb4 collated tables
+            $dbh->do(qq|ALTER TABLE $name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci|);
+        }
     }
     $dbh->do(q|SET foreign_key_checks = 1|);;
 
     print "Upgrade to $DBversion done (Bug 11944 - Convert DB tables to utf8_unicode_ci)\n";
-    SetVersion ($DBversion);
+    SetVersion($DBversion);
 }
 
 $DBversion = "3.19.00.007";
@@ -9755,24 +9806,398 @@ if ( CheckVersion($DBversion) ) {
 $DBversion = "3.19.00.010";
 if ( CheckVersion($DBversion) ) {
     $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('SessionRestrictionByIP','1','Check for Change in  Remote IP address for Session Security. Disable when remote ip address changes frequently.','','YesNo')");
-    print "Upgrade to $DBversion done (Bug 5511 - SessionRestrictionByIP)";
+    print "Upgrade to $DBversion done (Bug 5511 - SessionRestrictionByIP)\n";
     SetVersion ($DBversion);
 }
 
-$DBversion = "3.19.00.XXX";
+$DBversion = "3.19.00.011";
 if ( CheckVersion($DBversion) ) {
     $dbh->do(q|
         INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES
-        (20, 'shelves', 'Virtual shelves', 0)
+        (20, 'lists', 'Lists', 0)
     |);
     $dbh->do(q|
         INSERT INTO permissions (module_bit, code, description) VALUES
-        (20, 'manage_shelves', 'Manage shelves')
+        (20, 'delete_public_lists', 'Delete public lists')
+    |);
+    print "Upgrade to $DBversion done (Bug 13417: Add permission to delete public lists)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.19.00.012";
+if(CheckVersion($DBversion)) {
+    $dbh->do(q{
+        ALTER TABLE biblioitems MODIFY COLUMN marcxml longtext
+    });
+
+    $dbh->do(q{
+        ALTER TABLE deletedbiblioitems MODIFY COLUMN marcxml longtext
+    });
+
+    print "Upgrade to $DBversion done (Bug 13523 - Remove NOT NULL restriction on field marcxml due to mysql STRICT_TRANS_TABLES)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.19.00.013";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q|
+        INSERT INTO permissions (module_bit, code, description) VALUES
+          (13, 'records_batchmod', 'Perform batch modification of records (biblios or authorities)')
+    |);
+    print "Upgrade to $DBversion done (Bug 11395: Add permission tools_records_batchmod)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.19.00.014";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q|
+        CREATE TABLE aqorder_users (
+            ordernumber int(11) NOT NULL,
+            borrowernumber int(11) NOT NULL,
+            PRIMARY KEY (ordernumber, borrowernumber),
+            CONSTRAINT aqorder_users_ibfk_1 FOREIGN KEY (ordernumber) REFERENCES aqorders (ordernumber) ON DELETE CASCADE ON UPDATE CASCADE,
+            CONSTRAINT aqorder_users_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE
+        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+    |);
+
+    $dbh->do(q|
+        INSERT INTO letter(module, code, branchcode, name, title, content, message_transport_type)
+        VALUES ('acquisition', 'ACQ_NOTIF_ON_RECEIV', '', 'Notification on receiving', 'Order received', 'Dear <<borrowers.firstname>> <<borrowers.surname>>,\n\n The order <<aqorders.ordernumber>> (<<biblio.title>>) has been received.\n\nYour library.', 'email')
+    |);
+    print "Upgrade to $DBversion done (Bug 12648: Add letter ACQ_NOTIF_ON_RECEIV )\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.19.00.015";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q|
+        ALTER TABLE search_history ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id);
+    |);
+    print "Upgrade to $DBversion done (Bug 11430 - Add primary key for search_history)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.19.00.016";
+if(CheckVersion($DBversion)) {
+    my @order_cancellation_reason = $dbh->selectrow_array("SELECT count(*) FROM authorised_values WHERE category='ORDER_CANCELLATION_REASON'");
+    if ($order_cancellation_reason[0] == 0) {
+        $dbh->do(q{
+            INSERT INTO authorised_values (category, authorised_value, lib) VALUES
+             ('ORDER_CANCELLATION_REASON', 0, 'No reason provided'),
+             ('ORDER_CANCELLATION_REASON', 1, 'Out of stock'),
+             ('ORDER_CANCELLATION_REASON', 2, 'Restocking')
+        });
+
+        my $already_existing_reasons = $dbh->selectcol_arrayref(q{
+            SELECT DISTINCT( cancellationreason )
+            FROM aqorders;
+        }, { Slice => {} });
+
+        my $update_orders_sth = $dbh->prepare(q{
+            UPDATE aqorders
+            SET cancellationreason = ?
+            WHERE cancellationreason = ?
+        });
+
+        my $insert_av_sth = $dbh->prepare(q{
+            INSERT INTO authorised_values (category, authorised_value, lib) VALUES
+             ('ORDER_CANCELLATION_REASON', ?, ?)
+        });
+        my $i = 3;
+        for my $reason ( @$already_existing_reasons ) {
+            next unless $reason;
+            $insert_av_sth->execute( $i, $reason );
+            $update_orders_sth->execute( $i, $reason );
+            $i++;
+        }
+        print "Upgrade to $DBversion done (Bug 13380: Add the ORDER_CANCELLATION_REASON authorised value)\n";
+    }
+    else {
+        print "Upgrade to $DBversion done (Bug 13380: ORDER_CANCELLATION_REASON authorised value already existed from earlier update!)\n";
+    }
+
+    SetVersion($DBversion);
+}
+
+
+$DBversion = '3.19.00.017';
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+    # First create the column
+    $dbh->do("ALTER TABLE issuingrules ADD onshelfholds tinyint(1) default 0 NOT NULL");
+    # Now update the column
+    if (C4::Context->preference("AllowOnShelfHolds")){
+        # Pref is on, set allow for all rules
+        $dbh->do("UPDATE issuingrules SET onshelfholds=1");
+    } else {
+        # If the preference is not set, leave off
+        $dbh->do("UPDATE issuingrules SET onshelfholds=0");
+    }
+    # Remove from the systempreferences table
+    $dbh->do("DELETE FROM systempreferences WHERE variable = 'AllowOnShelfHolds'");
+
+    # First create the column
+    $dbh->do("ALTER TABLE issuingrules ADD opacitemholds char(1) DEFAULT 'N' NOT NULL");
+    # Now update the column
+    my $opacitemholds = C4::Context->preference("OPACItemHolds") || '';
+    if (lc ($opacitemholds) eq 'force') {
+        $opacitemholds = 'F';
+    }
+    else {
+        $opacitemholds = $opacitemholds ? 'Y' : 'N';
+    }
+    # Set allow for all rules
+    $dbh->do("UPDATE issuingrules SET opacitemholds='$opacitemholds'");
+
+    # Remove from the systempreferences table
+    $dbh->do("DELETE FROM systempreferences WHERE variable = 'OPACItemHolds'");
+
+    print "Upgrade to $DBversion done (Bug 5786 - Move AllowOnShelfHolds to circulation matrix; Move OPACItemHolds system preference to circulation matrix)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.19.00.018";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q|
+        UPDATE systempreferences set variable="OpacAdditionalStylesheet" WHERE variable="opaccolorstylesheet"
+    |);
+    print "Upgrade to $DBversion done (Bug 10328: Rename opaccolorstylesheet to OpacAdditionalStylesheet\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.19.00.019";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q{
+        INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
+        VALUES('Coce','0', 'If on, enables cover retrieval from the configured Coce server', NULL, 'YesNo')
+    });
+    $dbh->do(q{
+        INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
+        VALUES('CoceHost', NULL, 'Coce server URL', NULL,'Free')
+    });
+    $dbh->do(q{
+        INSERT IGNORE INTO systempreferences (variable, value, explanation, options, type)
+        VALUES('CoceProviders', NULL, 'Coce providers', 'aws,gb,ol', 'multiple')
+    });
+    print "Upgrade to $DBversion done (Bug 9580: Cover image from Coce, a remote image URL cache)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.19.00.020";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q|
+        ALTER TABLE aqorders DROP COLUMN supplierreference;
     |);
-    print "Upgrade to $DBversion done (Bug 13417: Add permission to manage shelves)\n";
+
+    print "Upgrade to $DBversion done (Bug 11008: DROP column aqorders.supplierreference)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.19.00.021";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q|
+        ALTER TABLE issues DROP COLUMN issuingbranch
+    |);
+    $dbh->do(q|
+        ALTER TABLE old_issues DROP COLUMN issuingbranch
+    |);
+    print "Upgrade to $DBversion done (Bug 2806: Remove issuingbranch columns)\n";
     SetVersion ($DBversion);
 }
 
+$DBversion = '3.19.00.022';
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q{
+        ALTER TABLE suggestions DROP COLUMN mailoverseeing;
+    });
+    print "Upgrade to $DBversion done (Bug 13006: Drop column suggestion.mailoverseeing)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.19.00.023";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q|
+        DELETE FROM systempreferences where variable = 'AddPatronLists'
+    |);
+    print "Upgrade to $DBversion done (Bug 13497: Remove the AddPatronLists system preferences)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.19.00.024";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(qq|DROP table patroncards;|);
+    print "Upgrade to $DBversion done (Bug 13539: Remove table patroncards from database as it's no longer in use)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.19.00.025";
+if ( CheckVersion($DBversion) ) {
+    $dbh->do(q|
+        INSERT INTO systempreferences ( variable, value, options, explanation, type ) VALUES
+        ('SearchWithISBNVariations','0',NULL,'If enabled, search on all variations of the ISBN','YesNo')
+    |);
+    print "Upgrade to $DBversion done (Bug 13528 - Add the SearchWithISBNVariations syspref)\n";
+    SetVersion ($DBversion);
+}
+
+$DBversion = "3.19.00.026";
+if(CheckVersion($DBversion)) {
+    if ( C4::Context->preference('marcflavour') eq 'MARC21' ) {
+    $dbh->do(q{
+        INSERT IGNORE INTO auth_tag_structure (authtypecode, tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value) VALUES
+        ('', '388', 'TIME PERIOD OF CREATION', 'TIME PERIOD OF CREATION', 1, 0, NULL);
+    });
+
+    $dbh->do(q{
+        INSERT IGNORE INTO auth_subfield_structure (authtypecode, tagfield, tagsubfield, liblibrarian, libopac, repeatable,
+        mandatory, tab, authorised_value, value_builder, seealso, isurl, hidden, linkid, kohafield, frameworkcode) VALUES
+        ('', '388', '0', 'Authority record control number or standard number', 'Authority record control number or standard number', 1, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '388', '2', 'Source of term', 'Source of term', 0, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '388', '3', 'Materials specified', 'Materials specified', 0, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '388', '6', 'Linkage', 'Linkage', 0, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '388', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, 3, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '388', 'a', 'Time period of creation term', 'Time period of creation term', 1, 0, 3, NULL, NULL, NULL, 0, 0, '', '', '');
+    });
+
+    $dbh->do(q{
+        UPDATE IGNORE auth_subfield_structure SET repeatable = 1 WHERE tagsubfield = 'g' AND tagfield IN
+        ('100','110','111','130','400','410','411','430','500','510','511','530','700','710','730');
+    });
+
+    $dbh->do(q{
+        INSERT IGNORE INTO auth_subfield_structure (authtypecode, tagfield, tagsubfield, liblibrarian, libopac, repeatable,
+        mandatory, tab, authorised_value, value_builder, seealso, isurl, hidden, linkid, kohafield, frameworkcode) VALUES
+        ('', '150', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 1, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '151', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 1, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '450', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 4, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '451', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 4, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '550', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 5, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '551', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 5, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '750', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '751', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '748', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '755', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '780', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '781', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '782', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '785', 'i', 'Relationship information', 'Relationship information', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '710', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '730', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '748', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '750', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '751', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '755', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '762', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '780', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '781', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '782', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '785', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', ''),
+        ('', '788', '4', 'Relationship code', 'Relationship code', 1, 0, 7, NULL, NULL, NULL, 0, 0, '', '', '');
+    });
+
+    $dbh->do(q{
+        UPDATE IGNORE auth_subfield_structure SET liblibrarian = 'Relationship information', libopac = 'Relationship information'
+        WHERE tagsubfield = 'i' AND tagfield IN ('700','710','730','750','751','762');
+    });
+
+    $dbh->do(q{
+        UPDATE IGNORE auth_subfield_structure SET liblibrarian = 'Relationship code', libopac = 'Relationship code'
+        WHERE tagsubfield = '4' AND tagfield IN ('700','710');
+    });
+
+    $dbh->do(q{
+        INSERT IGNORE INTO marc_tag_structure (tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value, frameworkcode) VALUES
+        ('370', 'ASSOCIATED PLACE', 'ASSOCIATED PLACE', 1, 0, NULL, ''),
+        ('388', 'TIME PERIOD OF CREATION', 'TIME PERIOD OF CREATION', 1, 0, NULL, '');
+    });
+
+    $dbh->do(q{
+        INSERT IGNORE INTO marc_subfield_structure (tagfield, tagsubfield, liblibrarian, libopac, repeatable, mandatory,
+        kohafield, tab, authorised_value, authtypecode, value_builder, isurl, hidden, frameworkcode, seealso, link, defaultvalue) VALUES
+        ('370', '0', 'Authority record control number or standard number', 'Authority record control number or standard number', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', '2', 'Source of term', 'Source of term', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', '6', 'Linkage', 'Linkage', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', 'c', 'Associated country', 'Associated country', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', 'f', 'Other associated place', 'Other associated place', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', 'g', 'Place of origin of work', 'Place of origin of work', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', 's', 'Start period', 'Start period', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', 't', 'End period', 'End period', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', 'u', 'Uniform Resource Identifier', 'Uniform Resource Identifier', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('370', 'v', 'Source of information', 'Source of information', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('377', 'l', 'Language term', 'Language term', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('382', 's', 'Total number of performers', 'Total number of performers', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('388', '0', 'Authority record control number or standard number', 'Authority record control number or standard number', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('388', '2', 'Source of term', 'Source of term', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('388', '3', ' Materials specified', ' Materials specified', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('388', '6', ' Linkage', ' Linkage', 0, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('388', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('388', 'a', 'Time period of creation term', 'Time period of creation term', 1, 0, '', 3, '', '', '', NULL, -6, '', '', '', NULL),
+        ('650', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, '', 6, '', '', '', 0, -1, '', '', '', NULL),
+        ('651', 'g', 'Miscellaneous information', 'Miscellaneous information', 1, 0, '', 6, '', '', '', 0, -1, '', '', '', NULL);
+    });
+
+    $dbh->do(q{
+        UPDATE IGNORE marc_subfield_structure SET repeatable = 1 WHERE tagsubfield = 'g' AND
+        tagfield IN ('100','110','111','130','240','243','246','247','600','610','611','630','700','710','711','730','800','810','811','830');
+    });
+    }
+
+    print "Upgrade to $DBversion done (Bug 13322 - Update MARC21 frameworks to Update No. 19 - October 2014)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = '3.19.00.027';
+if ( CheckVersion($DBversion) ) {
+    $dbh->do("ALTER TABLE items ADD COLUMN itemnotes_nonpublic MEDIUMTEXT AFTER itemnotes");
+    $dbh->do("ALTER TABLE deleteditems ADD COLUMN itemnotes_nonpublic MEDIUMTEXT AFTER itemnotes");
+    print "Upgrade to $DBversion done (Bug 4222: Nonpublic note not appearing in the staff client) <b>Please check each of your frameworks to ensure your non-public item notes are mapped to items.itemnotes_nonpublic. After doing so please have your administrator run misc/batchRebuildItemsTables.pl </b>)\n";
+    SetVersion($DBversion);
+}
+
+$DBversion = "3.19.00.XXX";
+if(CheckVersion($DBversion)) {
+    $dbh->do(q{
+        ALTER TABLE old_issues ADD issue_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
+    });
+
+    $dbh->do(q{
+        ALTER TABLE old_issues CHANGE issue_id issue_id INT( 11 ) NOT NULL
+    });
+
+    $dbh->do(q{
+        ALTER TABLE issues ADD issue_id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
+    });
+
+    $dbh->do(q{
+        UPDATE issues SET issue_id = issue_id + ( SELECT COUNT(*) FROM old_issues ) ORDER BY issue_id DESC
+    });
+
+    my $max_issue_id = $schema->resultset('Issue')->get_column('issue_id')->max();
+    if ($max_issue_id) {
+        $max_issue_id++;
+        $dbh->do(qq{
+            ALTER TABLE issues AUTO_INCREMENT = $max_issue_id
+        });
+    }
+
+    print "Upgrade to $DBversion done (Bug 13790 - Add unique id issue_id to issues and oldissues tables)\n";
+    SetVersion($DBversion);
+}
+
+
+# DEVELOPER PROCESS, search for anything to execute in the db_update directory
+# SEE bug 13068
+# if there is anything in the atomicupdate, read and execute it.
+
+my $update_dir = C4::Context->config('intranetdir') . '/installer/data/mysql/atomicupdate/';
+opendir( my $dirh, $update_dir );
+while ( my $file = readdir $dirh ) {
+    next unless $file =~ /\.sql$/;    # skip non SQL files
+    print "DEV atomic update : $file \n";
+    my $installer = C4::Installer->new();
+    my $rv = $installer->load_sql( $update_dir . $file ) ? 0 : 1;
+}
+
 =head1 FUNCTIONS
 
 =head2 TableExists($table)