Änderung von Upgrade-Script change_taxzone_id_0
authorNiclas Zimmermann <niclas@kivitendo-premium.de>
Mon, 9 Sep 2013 15:13:20 +0000 (17:13 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Mon, 4 Aug 2014 15:31:40 +0000 (17:31 +0200)
Die Tabellen ar und ap werden jetzt auch an den ID-Wechsel angepasst.

Weiterhin werden 2 Fremdschlüssel gesetzt, die durch den Wechsel
aufgefallen sind.

sql/Pg-upgrade2/change_taxzone_id_0.pl

index 2afb053..23b2023 100644 (file)
@@ -1,5 +1,5 @@
 # @tag: change_taxzone_id_0
-# @description: Verändert die id von 0 auf einen anderen Wert größer 0 in tax_zones, wenn es so einen Eintrag gibt.
+# @description: Verändert die id von 0 auf einen anderen Wert größer 0 in tax_zones, wenn es so einen Eintrag gibt und setzt zwei Fremdschlüssel von Tabellen ar/ap auf tax_zones.
 # @depends: convert_taxzone taxzone_default_id taxzone_sortkey
 package SL::DBUpgrade2::change_taxzone_id_0;
 
@@ -11,7 +11,7 @@ use parent qw(SL::DBUpgrade2::Base);
 sub run {
   my ($self) = @_;
 
-  my $query = qq|SELECT id FROM tax_zones ORDER BY id DESC|;
+  my $query = qq|SELECT id FROM tax_zones ORDER BY id DESC LIMIT 1|;
   my ($id) = $self->dbh->selectrow_array($query);
   $id++;
 
@@ -19,19 +19,34 @@ sub run {
   my $sth = $self->dbh->prepare($query);
   $sth->execute || $::form->dberror($query);
 
-  my $ref = $sth->fetchrow_hashref("NAME_lc");
+  if (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
 
-  $query = qq|INSERT INTO tax_zones (id, description, sortkey) VALUES (?,?,?)|;
-  $self->db_query($query, bind => [ $id, $ref->{description}, $ref->{sortkey} ]);
+    $query = qq|INSERT INTO tax_zones (id, description, sortkey) VALUES (?,?,?)|;
+    $self->db_query($query, bind => [ $id, $ref->{description}, $ref->{sortkey} ]);
 
-  $query = qq|UPDATE taxzone_charts SET taxzone_id=$id WHERE taxzone_id=0|;
-  $self->db_query($query);
+    $query = qq|UPDATE taxzone_charts SET taxzone_id=$id WHERE taxzone_id=0|;
+    $self->db_query($query);
 
-  $sth->finish;
+    $query = qq|DELETE FROM tax_zones WHERE id=0|;
+    $self->db_query($query);
+
+    #Adapt other tables to the new id:
+    $query = qq|UPDATE ar SET taxzone_id=$id WHERE taxzone_id=0|;
+    $self->db_query($query);
+
+    $query = qq|UPDATE ap SET taxzone_id=$id WHERE taxzone_id=0|;
+    $self->db_query($query);
+  }
 
-  $query = qq|DELETE FROM tax_zones WHERE id=0|;
+  #Set Constraints:
+  $query = qq|ALTER TABLE ar ADD FOREIGN KEY (taxzone_id) REFERENCES tax_zones (id)|;
   $self->db_query($query);
 
+  $query = qq|ALTER TABLE ap ADD FOREIGN KEY (taxzone_id) REFERENCES tax_zones (id)|;
+  $self->db_query($query);
+
+  $sth->finish;
+
   return 1;
 } # end run