DRY
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 30 Nov 2010 07:52:15 +0000 (08:52 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 30 Dec 2010 13:33:26 +0000 (14:33 +0100)
SL/DBUpgrade2.pm
SL/User.pm

index c9c742c..929d592 100644 (file)
@@ -326,6 +326,22 @@ sub update2_available {
   return $needs_update;
 }
 
+sub unapplied_upgrade_scripts {
+  my ($self, $dbh) = @_;
+
+  my @all_scripts = map { $_->{applied} = 0; $_ } $self->sort_dbupdate_controls;
+
+  my $query = qq|SELECT tag FROM schema_info|;
+  my $sth   = $dbh->prepare($query);
+  $sth->execute || $self->{form}->dberror($query);
+  while (my ($tag) = $sth->fetchrow_array()) {
+    $self->{all_controls}->{$tag}->{applied} = 1 if defined $self->{all_controls}->{$tag};
+  }
+  $sth->finish;
+
+  return grep { !$_->{applied} } @all_scripts;
+}
+
 sub _check_for_loops {
   my ($form, $file_name, $controls, $tag, @path) = @_;
 
index e1ec6ef..6edcbc6 100644 (file)
@@ -647,59 +647,29 @@ sub dbupdate2 {
 
   $form->{sid} = $form->{dbdefault};
 
-  my @upgradescripts = ();
-  my ($query, $sth, $tag);
-  my $rc = -2;
-
-  @upgradescripts = $dbupdater->sort_dbupdate_controls;
+  my $rc         = -2;
+  my $db_charset = $main::dbcharset || Common::DEFAULT_CHARSET;
 
-  my $db_charset = $main::dbcharset;
-  $db_charset ||= Common::DEFAULT_CHARSET;
+  map { $_->{description} = SL::Iconv::convert($_->{charset}, $db_charset, $_->{description}) } values %{ $dbupdater->{all_controls} };
 
   foreach my $db (split / /, $form->{dbupdate}) {
-
     next unless $form->{$db};
 
     # strip db from dataset
     $db =~ s/^db//;
     &dbconnect_vars($form, $db);
 
-    my $dbh =
-      DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
-      or $form->dberror;
+    my $dbh = DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) or $form->dberror;
 
     $dbh->do($form->{dboptions}) if ($form->{dboptions});
 
-    map({ $_->{"applied"} = 0; } @upgradescripts);
-
     $self->create_schema_info_table($form, $dbh);
 
-    $query = qq|SELECT tag FROM schema_info|;
-    $sth = $dbh->prepare($query);
-    $sth->execute() || $form->dberror($query);
-    while (($tag) = $sth->fetchrow_array()) {
-      $dbupdater->{all_controls}->{$tag}->{"applied"} = 1 if (defined($dbupdater->{all_controls}->{$tag}));
-    }
-    $sth->finish();
-
-    my $all_applied = 1;
-    foreach (@upgradescripts) {
-      if (!$_->{"applied"}) {
-        $all_applied = 0;
-        last;
-      }
-    }
+    my @upgradescripts = $dbupdater->unapplied_upgrade_scripts($dbh);
 
-    next if ($all_applied);
+    $dbh->disconnect and next if !@upgradescripts;
 
     foreach my $control (@upgradescripts) {
-      next if ($control->{"applied"});
-
-      $control->{description} = SL::Iconv::convert($control->{charset}, $db_charset, $control->{description});
-
-      $control->{"file"} =~ /\.(sql|pl)$/;
-      my $file_type = $1;
-
       # apply upgrade
       $main::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $control->{file}");
       print $form->parse_html_template("dbupgrade/upgrade_message2", $control);