epic-s6ts
[kivitendo-erp.git] / sql / Pg-upgrade2 / acc_trans_id_uniqueness.pl
index 9c0c459..f83e99e 100644 (file)
@@ -1,30 +1,18 @@
 # @tag: acc_trans_id_uniqueness
 # @description: Sorgt dafür, dass acc_trans.acc_trans_id eindeutig ist
 # @depends: release_2_6_1
-# @charset: utf-8
+package SL::DBUpgrade2::acc_trans_id_uniqueness;
 
 use utf8;
 use strict;
-use Data::Dumper;
 
-die "This script cannot be run from the command line." unless $::form;
+use parent qw(SL::DBUpgrade2::Base);
 
-sub mydberror {
-  my ($msg) = @_;
-  die $dbup_locale->text("Database update error:") . "<br>$msg<br>" . $DBI::errstr;
-}
-
-sub do_query {
-  my ($query, $may_fail) = @_;
+use SL::DBUtils;
 
-  return if $dbh->do($query);
-
-  mydberror($query) unless ($may_fail);
-  $dbh->rollback();
-  $dbh->begin_work();
-}
+sub run {
+  my ($self) = @_;
 
-sub do_update {
   my $query = <<SQL;
     SELECT acc_trans_id, trans_id, itime, mtime
     FROM acc_trans
@@ -34,7 +22,7 @@ sub do_update {
     ORDER BY trans_id, itime, mtime NULLS FIRST
 SQL
 
-  my @entries = selectall_hashref_query($form, $dbh, $query);
+  my @entries = selectall_hashref_query($::form, $self->dbh, $query);
 
   return 1 unless @entries;
 
@@ -45,12 +33,12 @@ SQL
     ))
 SQL
 
-  do_query($query, 0);
+  $self->db_query($query);
 
-  my %entries_by_trans_id;
+  my %skipped_acc_trans_ids;
   foreach my $entry (@entries) {
-    if (!$entries_by_trans_id{ $entry->{trans_id} }) {
-      $entries_by_trans_id{ $entry->{trans_id} } = [];
+    if (!$skipped_acc_trans_ids{ $entry->{acc_trans_id} }) {
+      $skipped_acc_trans_ids{ $entry->{acc_trans_id} } = 1;
     } else {
       my $mtime = $entry->{mtime} ? "= '$entry->{mtime}'" : 'IS NULL';
       $query    = <<SQL;
@@ -62,11 +50,11 @@ SQL
           AND (mtime $mtime)
 SQL
 
-      do_query($query, 0);
+      $self->db_query($query);
     }
   }
 
   return 1;
 }
 
-return do_update();
+1;