Bug 13790: Add unique id issue_id to issues and old_issues tables
authorKyle M Hall <kyle@bywatersolutions.com>
Wed, 4 Mar 2015 09:16:24 +0000 (01:16 -0800)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Thu, 23 Apr 2015 15:57:36 +0000 (12:57 -0300)
Test Plan:
1) Use a database with existing issues and old issues
2) Apply this patch
3) Run updatedatabase
4) Inspect the database
   a) old_issues should now have a column issue_id starting with 1
   b) issues should now have a column issue_id starting with the number
      of rows in the old_issues table plus one
5) Perform a checkout, note it is written to the database
6) Check in the checked out item, note it is moved to the old_issues table

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Nick Clemens <nick@quecheelibrary.org>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
installer/data/mysql/kohastructure.sql
installer/data/mysql/updatedatabase.pl

index 85c0de5..9e5d436 100644 (file)
@@ -1141,6 +1141,7 @@ CREATE TABLE `import_items` (
 
 DROP TABLE IF EXISTS `issues`;
 CREATE TABLE `issues` ( -- information related to check outs or issues
+  `issue_id` int(11) NOT NULL AUTO_INCREMENT, -- primary key for issues table
   `borrowernumber` int(11), -- foreign key, linking this to the borrowers table for the patron this item was checked out to
   `itemnumber` int(11), -- foreign key, linking this to the items table for the item that was checked out
   `date_due` datetime default NULL, -- datetime the item is due (yyyy-mm-dd hh:mm::ss)
@@ -1153,6 +1154,7 @@ CREATE TABLE `issues` ( -- information related to check outs or issues
   `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, -- the date and time this record was last touched
   `issuedate` datetime default NULL, -- date the item was checked out or issued
   `onsite_checkout` int(1) NOT NULL default 0, -- in house use flag
+  PRIMARY KEY (`issue_id`),
   KEY `issuesborridx` (`borrowernumber`),
   KEY `itemnumber_idx` (`itemnumber`),
   KEY `branchcode_idx` (`branchcode`),
@@ -1616,6 +1618,7 @@ CREATE TABLE `oai_sets_biblios` (
 
 DROP TABLE IF EXISTS `old_issues`;
 CREATE TABLE `old_issues` ( -- lists items that were checked out and have been returned
+  `issue_id` int(11) NOT NULL, -- primary key for issues table
   `borrowernumber` int(11) default NULL, -- foreign key, linking this to the borrowers table for the patron this item was checked out to
   `itemnumber` int(11) default NULL, -- foreign key, linking this to the items table for the item that was checked out
   `date_due` datetime default NULL, -- date the item is due (yyyy-mm-dd)
@@ -1628,6 +1631,7 @@ CREATE TABLE `old_issues` ( -- lists items that were checked out and have been r
   `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, -- the date and time this record was last touched
   `issuedate` datetime default NULL, -- date the item was checked out or issued
   `onsite_checkout` int(1) NOT NULL default 0, -- in house use flag
+  PRIMARY KEY (`issue_id`),
   KEY `old_issuesborridx` (`borrowernumber`),
   KEY `old_issuesitemidx` (`itemnumber`),
   KEY `branchcode_idx` (`branchcode`),
index 5a6bbdb..59d2083 100755 (executable)
@@ -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' );
@@ -3809,8 +3810,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";
@@ -9916,6 +9917,7 @@ if(CheckVersion($DBversion)) {
     SetVersion($DBversion);
 }
 
+
 $DBversion = '3.19.00.017';
 if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
     # First create the column
@@ -10163,6 +10165,34 @@ while ( my $file = readdir $dirh ) {
     my $rv = $installer->load_sql( $update_dir . $file ) ? 0 : 1;
 }
 
+$DBversion = "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 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 $schema = Koha::Database->new()->schema();
+    my $max_issue_id = $schema->resultset('Issue')->get_column('issue_id')->max();
+    $max_issue_id ||= $schema->resultset('OldIssue')->get_column('issue_id')->max();
+    $max_issue_id ||= 0;
+    $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);
+
+}
+
 =head1 FUNCTIONS
 
 =head2 TableExists($table)