Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 0b280f98

Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt

  • ID 0b280f98054da74f79cbc9fdb3e9f4c23326be53
  • Vorgänger 41a03969
  • Nachfolger 6da3168c

Administration: Die Funktion zur Aktualisierung von nicht aktuellen Datenbanken neu geschrieben und wieder aktiviert. Unterstützt auch die Scripte in Pg-upgrade2.

Unterschiede anzeigen:

SL/User.pm
40 40
use SL::DBUpgrade2;
41 41
use SL::DBUtils;
42 42
use SL::Iconv;
43
use SL::Inifile;
43 44

  
44 45
sub new {
45 46
  $main::lxdebug->enter_sub();
......
666 667

  
667 668
  my ($self, $form) = @_;
668 669

  
669
  my %dbsources = ();
670
  my $query;
671

  
672
  $form->{sid} = $form->{dbdefault};
673
  &dbconnect_vars($form, $form->{dbdefault});
674

  
675
  my $dbh =
676
    DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
677
    or $form->dberror;
678

  
679
  if ($form->{dbdriver} eq 'Pg') {
670
  my $members  = Inifile->new($main::memberfile);
671
  my $controls = parse_dbupdate_controls($form, $form->{dbdriver});
680 672

  
681
    $query =
682
      qq|SELECT d.datname FROM pg_database d, pg_user u | .
683
      qq|WHERE d.datdba = u.usesysid AND u.usename = ?|;
684
    my $sth = prepare_execute_query($form, $dbh, $query, $form->{dbuser});
673
  my ($query, $sth, %dbs_needing_updates);
685 674

  
686
    while (my ($db) = $sth->fetchrow_array) {
675
  foreach my $login (grep /[a-z]/, keys %{ $members }) {
676
    my $member = $members->{$login};
687 677

  
688
      next if ($db =~ /^template/);
678
    map { $form->{$_} = $member->{$_} } qw(dbname dbuser dbpasswd dbhost dbport);
679
    dbconnect_vars($form, $form->{dbname});
680
    $main::lxdebug->dump(0, "form", $form);
681
    my $dbh = DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd});
689 682

  
690
      &dbconnect_vars($form, $db);
683
    next unless $dbh;
691 684

  
692
      my $dbh2 =
693
        DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
694
        or $form->dberror;
685
    my $version;
695 686

  
696
      $query =
697
        qq|SELECT tablename FROM pg_tables | .
698
        qq|WHERE tablename = 'defaults'|;
699
      my $sth2 = prepare_execute_query($form, $dbh, $query);
700

  
701
      if ($sth2->fetchrow_array) {
702
        $query = qq|SELECT version FROM defaults|;
703
        my ($version) = selectrow_query($form, $dbh2, $query);
704
        $dbsources{$db} = $version;
705
      }
706
      $sth2->finish;
707
      $dbh2->disconnect;
687
    $query = qq|SELECT version FROM defaults|;
688
    $sth = prepare_query($form, $dbh, $query);
689
    if ($sth->execute()) {
690
      ($version) = $sth->fetchrow_array();
708 691
    }
709
    $sth->finish;
710
  }
711

  
712
  if ($form->{dbdriver} eq 'Oracle') {
713
    $query =
714
      qq|SELECT owner FROM dba_objects |.
715
      qq|WHERE object_name = 'DEFAULTS' AND object_type = 'TABLE'|;
716

  
717
    $sth = $dbh->prepare($query);
718
    $sth->execute || $form->dberror($query);
719

  
720
    while (my ($db) = $sth->fetchrow_array) {
721

  
722
      $form->{dbuser} = $db;
723
      &dbconnect_vars($form, $db);
724

  
725
      my $dbh =
726
        DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
727
        or $form->dberror;
692
    $sth->finish();
693
    $dbh->disconnect();
728 694

  
729
      $query = qq|SELECT version FROM defaults|;
730
      my $sth = $dbh->prepare($query);
731
      $sth->execute;
695
    next unless $version;
732 696

  
733
      if (my ($version) = $sth->fetchrow_array) {
734
        $dbsources{$db} = $version;
735
      }
736
      $sth->finish;
737
      $dbh->disconnect;
697
    if (update_available($form->{dbdriver}, $version) || update2_available($form, $controls)) {
698
      my $dbinfo = {};
699
      map { $dbinfo->{$_} = $member->{$_} } grep /^db/, keys %{ $member };
700
      $dbs_needing_updates{$member->{dbhost} . "::" . $member->{dbname}} = $dbinfo;
738 701
    }
739
    $sth->finish;
740 702
  }
741 703

  
742
  $dbh->disconnect;
743

  
744 704
  $main::lxdebug->leave_sub();
745 705

  
746
  return %dbsources;
706
  return values %dbs_needing_updates;
747 707
}
748 708

  
749 709
sub calc_version {
......
793 753

  
794 754
  local *SQLDIR;
795 755

  
796
  opendir(SQLDIR, "sql/${dbdriver}-upgrade")
797
    or &error("", "sql/${dbdriver}-upgrade: $!");
798
  my @upgradescripts =
799
    grep(/$form->{dbdriver}-upgrade-\Q$cur_version\E.*\.(sql|pl)$/,
800
         readdir(SQLDIR));
801
  closedir(SQLDIR);
756
  opendir SQLDIR, "sql/${dbdriver}-upgrade" || error("", "sql/${dbdriver}-upgrade: $!");
757
  my @upgradescripts = grep /${dbdriver}-upgrade-\Q$cur_version\E.*\.(sql|pl)$/, readdir SQLDIR;
758
  closedir SQLDIR;
802 759

  
803 760
  return ($#upgradescripts > -1);
804 761
}
......
940 897

  
941 898
    map({ $_->{"applied"} = 0; } @upgradescripts);
942 899

  
900
    $self->create_schema_info_table($form, $dbh);
901

  
943 902
    $query = qq|SELECT tag FROM schema_info|;
944 903
    $sth = $dbh->prepare($query);
945 904
    $sth->execute() || $form->dberror($query);

Auch abrufbar als: Unified diff