convert_taxzones-Upgrade: prepared statement für Fehlermeldungen und Performance
authorMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 30 Apr 2015 08:52:13 +0000 (10:52 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 30 Apr 2015 09:00:01 +0000 (11:00 +0200)
sql/Pg-upgrade2/convert_taxzone.pl

index b1e1a0b..3343c6f 100644 (file)
@@ -39,22 +39,27 @@ SQL
     }
     $sth->finish;
 
+    my $taxzone_charts_update_query = "INSERT INTO taxzone_charts (taxzone_id, buchungsgruppen_id, income_accno_id, expense_accno_id) VALUES (?, ?, ?, ?)";
+    $sth = $self->dbh->prepare($taxzone_charts_update_query);
+
     # convert Buchungsgruppen to taxzone_charts if any exist
     # the default swiss COA doesn't have any, for example
-    if ( scalar @{ $::form->{buchungsgruppen} } > 0 ) { 
-        my $taxzone_charts_update_query;
+    if ( scalar @{ $::form->{buchungsgruppen} } > 0 ) {
         foreach my $taxzone (  @{$::form->{taxzones}} ) {
             foreach my $buchungsgruppe (  @{$::form->{buchungsgruppen}} ) {
                 my $id = $taxzone->{id};
                 my $income_accno_id = $buchungsgruppe->{"income_accno_id_$id"};
                 my $expense_accno_id = $buchungsgruppe->{"expense_accno_id_$id"};
-                # TODO: check if the variables have a value
-                $taxzone_charts_update_query .= "INSERT INTO taxzone_charts (taxzone_id, buchungsgruppen_id, income_accno_id, expense_accno_id) VALUES ('$taxzone->{id}', '$buchungsgruppe->{id}', $income_accno_id, $expense_accno_id);\n";
+                my @values           = ($taxzone->{id}, $buchungsgruppe->{id}, $income_accno_id, $expense_accno_id);
+                $sth->execute(@values) && next;
+                $taxzone_charts_update_query =~ s{\?}{shift(@values)}eg;
+                $::form->dberror($taxzone_charts_update_query);
             };
         };
-        $self->db_query($taxzone_charts_update_query) if $taxzone_charts_update_query;
     };
 
+    $sth->finish;
+
     my $clean_buchungsgruppen_query = <<SQL;
 alter table buchungsgruppen drop column income_accno_id_0;
 alter table buchungsgruppen drop column income_accno_id_1;