DB-Upgrade: Queries nicht in der Schleife preparen
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 21 Apr 2016 17:26:48 +0000 (19:26 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Thu, 21 Apr 2016 17:26:48 +0000 (19:26 +0200)
Datenbank mit 100k invoice Einträgen braucht Jahre sonst.

sql/Pg-upgrade2/invoice_positions.pl
sql/Pg-upgrade2/orderitems_delivery_order_items_positions.pl

index f8bc911..d92daca 100644 (file)
@@ -17,8 +17,10 @@ sub run {
 
 
   $query = qq|SELECT * FROM invoice ORDER BY trans_id, id|;
+  my $query2 = qq|UPDATE invoice SET position = ? WHERE id = ?|;
 
   my $sth = $self->dbh->prepare($query);
+  my $sth2 = $self->dbh->prepare($query2);
   $sth->execute || $::form->dberror($query);
 
   # set new position field in order of ids, starting by one for each invoice
@@ -32,10 +34,10 @@ sub run {
     }
     $last_invoice_id = $ref->{trans_id};
 
-    $query = qq|UPDATE invoice SET position = ? WHERE id = ?|;
-    $self->db_query($query, bind => [ $position, $ref->{id} ]);
+    $sth2->execute($position, $ref->{id});
   }
   $sth->finish;
+  $sth2->finish;
 
   $query = qq|ALTER TABLE invoice ALTER COLUMN position SET NOT NULL|;
   $self->db_query($query);
index cda9200..712ce83 100644 (file)
@@ -25,8 +25,10 @@ sub run {
 
     my $order_id_col = $order_id_cols{ $table };
     $query = qq|SELECT * FROM $table ORDER BY $order_id_col, id|;
+    my $query2 = qq|UPDATE $table SET position = ? WHERE id = ?|;
 
     my $sth = $self->dbh->prepare($query);
+    my $sth2 = $self->dbh->prepare($query2);
     $sth->execute || $::form->dberror($query);
 
     # set new position field in order of ids, starting by one for each order
@@ -40,10 +42,10 @@ sub run {
       }
       $last_order_id = $ref->{ $order_id_col };
 
-      $query = qq|UPDATE $table SET position = ? WHERE id = ?|;
-      $self->db_query($query, bind => [ $position, $ref->{id} ]);
+      $sth2->execute($position, $ref->{id});
     }
     $sth->finish;
+    $sth2->finish;
 
 
     $query = qq|ALTER TABLE $table ALTER COLUMN position SET NOT NULL|;