From 31f58869614150bf0423d83120deac1b21b1411e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20B=C3=BCren?= Date: Tue, 2 Mar 2010 08:38:02 +0100 Subject: [PATCH] =?utf8?q?Falls=20der=20Datenbestand=20des=20jeweiligen=20?= =?utf8?q?Mandanten=20keine=20NULL-Buchungen=20besitzt:=20alter=20acc=5Ftr?= =?utf8?q?ans=20set=20char=5Fid=20NOT=20NULL,=20trans=5Fid=20NOT=20NULL=20?= =?utf8?q?und=20ferner=20project=5Fid=20als=20Fremdschl=C3=BCssel=20auf=20?= =?utf8?q?project?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- ...dd_more_constraints_fibu_projekt_xplace.pl | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 sql/Pg-upgrade2/add_more_constraints_fibu_projekt_xplace.pl diff --git a/sql/Pg-upgrade2/add_more_constraints_fibu_projekt_xplace.pl b/sql/Pg-upgrade2/add_more_constraints_fibu_projekt_xplace.pl new file mode 100644 index 000000000..dd3705caa --- /dev/null +++ b/sql/Pg-upgrade2/add_more_constraints_fibu_projekt_xplace.pl @@ -0,0 +1,64 @@ +# @tag: add_more_constraints_fibu_projekt_xplace3 +# @description: Falls der Datenbestand es unproblematisch hergibt, ein paar 'schärfere' Constraints für die acc_trans gesetzt. Keine acc_trans-Eintrag ohne trans_id oder chart_id. Ferner project_id in acc_trans als Fremdschlüssel für project definiert. +# @depends: release_2_6_0 fix_acc_trans_ap_taxkey_bug +# @charset: utf-8 + +use strict; +use Data::Dumper; +die("This script cannot be run from the command line.") unless ($main::form); + +sub mydberror { + my ($msg) = @_; + die($dbup_locale->text("Database update error:") . + "
$msg
" . $DBI::errstr); +} + +sub do_query { + my ($query, $may_fail) = @_; + + if (!$dbh->do($query)) { + mydberror($query) unless ($may_fail); + $dbh->rollback(); + $dbh->begin_work(); + } +} + +sub do_update { + my @queries; + + # die project_id in der acc_trans ist auch zwingend fremdschlüssel in project + push @queries, "ALTER TABLE acc_trans ADD FOREIGN KEY (project_id) REFERENCES project(id)"; + + my $query = qq|select count(*) from acc_trans where chart_id is NULL|; + my $sth_all_groups = prepare_execute_query($form, $dbh, $query); + while (my $hash_ref = $sth_all_groups->fetchrow_hashref()) { # Schleife + if ($hash_ref->{count} eq 0){ + # Falls wir keine alte buggy Installation haben, ist es super die + # Gewissheit zu haben, dass kein acc_trans-Eintrag ohne chart_id vorhanden ist + push @queries, "ALTER TABLE acc_trans ALTER COLUMN chart_id SET NOT NULL"; + } + } + $sth_all_groups->finish(); + my $query = qq|select count(*) from acc_trans where trans_id is NULL|; + my $sth_all_groups = prepare_execute_query($form, $dbh, $query); + while (my $hash_ref = $sth_all_groups->fetchrow_hashref()) { # Schleife + if ($hash_ref->{count} eq 0){ + # Falls wir keine alte buggy Installation haben, ist es super die + # Gewissheit zu haben, dass kein acc_trans-Eintrag ohne trans_id vorhanden ist + push @queries, "ALTER TABLE acc_trans ALTER COLUMN trans_id SET NOT NULL"; + } + } + $sth_all_groups->finish(); + + # if in doubt use brute force ;-) jb + foreach my $query (@queries){ + my $sth = prepare_query($form, $dbh, $query); + do_statement($form,$sth,$query); + $sth->finish(); + } + $dbh ->commit(); + return 1; +} + +return do_update(); + -- 2.20.1