]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Perl-Upgrade-Files: Nach Exception Rollback & bei Erfolg immer 1 zurückgeben
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 4 Jun 2013 13:21:21 +0000 (15:21 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 5 Jun 2013 08:04:04 +0000 (10:04 +0200)
Exceptions sind vorher nach oben gebubblet, da $result undef
war. $result // 1 ist nun mal 1, was überhaupt keinen Sinn ergibt --
und dadurch wurde kein Rollback gemacht (geschweige denn die
Fehlermeldung wie gewünscht ausgegeben).

Resultat war bei Perl-DB-Upgrades der Auth-Datenbank, dass trotz
Exception später beim Speichern der Session ein Commit gemacht wurde
-- und damit alle Änderungen vor der Exception mit übernommen
wurden (sofern es da keinen Datenbankfehler gab sonder nur eine von
Perl selber ausgelöste Exception).

SL/DBUpgrade2.pm
sql/Pg-upgrade2/SKR04-3804-addition.pl
sql/Pg-upgrade2/USTVA_abstraction.pl
sql/Pg-upgrade2/USTVA_at.pl
sql/Pg-upgrade2/fix_acc_trans_ap_taxkey_bug.pl

index 6de1fd258426dd19eeac498e15394b8557f3b419..5bf31d7e8cbb89ff19a376186094e15eb6e2e5f8 100644 (file)
@@ -1,5 +1,6 @@
 package SL::DBUpgrade2;
 
 package SL::DBUpgrade2;
 
+use English qw(-no_match_vars);
 use IO::File;
 use List::MoreUtils qw(any);
 
 use IO::File;
 use List::MoreUtils qw(any);
 
@@ -248,19 +249,21 @@ sub process_perl_script {
 
   # setup dbup_ export vars & run script
   my %dbup_myconfig = map { ($_ => $::form->{$_}) } qw(dbname dbuser dbpasswd dbhost dbport dbconnect);
 
   # setup dbup_ export vars & run script
   my %dbup_myconfig = map { ($_ => $::form->{$_}) } qw(dbname dbuser dbpasswd dbhost dbport dbconnect);
-  my $result        = SL::DBUpgrade2::Base::execute_script(
-    file_name => $filename,
-    tag       => $version_or_control->{tag},
-    dbh       => $dbh,
-    myconfig  => \%dbup_myconfig,
-  );
+  my $result        = eval {
+    SL::DBUpgrade2::Base::execute_script(
+      file_name => $filename,
+      tag       => $version_or_control->{tag},
+      dbh       => $dbh,
+      myconfig  => \%dbup_myconfig,
+    );
+  };
 
 
-  if (1 != ($result // 1)) {
-    $dbh->rollback();
-  }
+  my $error = $EVAL_ERROR;
+
+  $dbh->rollback if 1 != ($result // -1);
 
   if (!defined($result)) {
 
   if (!defined($result)) {
-    print $::form->parse_html_template("dbupgrade/error", { file  => $filename, error => $@ });
+    print $::form->parse_html_template("dbupgrade/error", { file  => $filename, error => $error });
     ::end_of_request();
   } elsif (1 != $result) {
     unlink("users/nologin") if (2 == $result);
     ::end_of_request();
   } elsif (1 != $result) {
     unlink("users/nologin") if (2 == $result);
index e11d7928ed27377bf62330becf8c52d76219733b..ce8618f6659c7277b0f5cafcc84f635e33ad52ce 100644 (file)
@@ -110,6 +110,7 @@ SQL
   $sth_query->finish;
   $sth_insert->finish;
 
   $sth_query->finish;
   $sth_insert->finish;
 
+  return 1;
 } # end run
 
 sub print_past_booking_warning {
 } # end run
 
 sub print_past_booking_warning {
index fc1638cd035ce465ef3e65f784d8ff98c03f3438..fe64a9224a9ce4185ac90a9ee9440bb143ba9fe9 100644 (file)
@@ -147,7 +147,7 @@ sub do_copy {
 
 sub run {
   my ($self) = @_;
 
 sub run {
   my ($self) = @_;
-  return $self->create_tables && $self->do_copy;
+  return $self->create_tables && $self->do_copy ? 1 : undef;
 }
 
 1;
 }
 
 1;
index 02143aec9ad2186c6629c1a2870c6258357ce457..a677c5121a6fe2141af1afe6670488107a41b835 100644 (file)
@@ -36,7 +36,7 @@ sub run {
     && $self->do_insert_tax()
     && $self->do_insert_taxkeys()
     && $self->do_insert_buchungsgruppen()
     && $self->do_insert_tax()
     && $self->do_insert_taxkeys()
     && $self->do_insert_buchungsgruppen()
-      ;
+    ? 1 : 0;
 }
 
 sub clear_tables {
 }
 
 sub clear_tables {
index f556ff23aa368e5e3a6c51fb79e1773a27ede14b..ec9e7f6afdcdd0f75aa5800fa6a0878543248b81 100644 (file)
@@ -91,6 +91,8 @@ SQL
   $h_change->finish();
 
   print $::locale->text('Number of entries changed: #1', $num_changed) . "<br/>\n";
   $h_change->finish();
 
   print $::locale->text('Number of entries changed: #1', $num_changed) . "<br/>\n";
+
+  return 1;
 }
 
 1;
 }
 
 1;