Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 4fd8bdbf

Von Moritz Bunkus vor fast 18 Jahren hinzugefügt

  • ID 4fd8bdbfb46b8b63a7d05457959b98c4956d1dbd
  • Vorgänger 73fb84d7
  • Nachfolger 3c559a20

Neuer Datenbankupgrademechanismus: Die Upgradedateien im neuen Verzeichnis sql/Pg-upgrade2 enthalten Informationen über Abhängigkeiten, die von Lx-Office ausgewertet werden, um die Reihenfolge zu bestimmen, in der Updates angewandt werden. Wird nicht mehr über Versionsnummern geregelt.

Unterschiede anzeigen:

SL/User.pm
34 34

  
35 35
package User;
36 36

  
37
use SL::DBUpgrade2;
38

  
37 39
sub new {
38 40
  $main::lxdebug->enter_sub();
39 41

  
......
162 164
		  '$myconfig{tel}', 'user')|;
163 165
      $dbh->do($query);
164 166
    }
167

  
168
    $self->create_schema_info_table($form, $dbh);
169

  
165 170
    $dbh->disconnect;
166 171

  
167 172
    $rc = 0;
168 173

  
169
    if (&update_available($myconfig{"dbdriver"}, $dbversion)) {
174
    my $controls =
175
      parse_dbupdate_controls($form, $myconfig{"dbdriver"});
170 176

  
171
      map { $form->{$_} = $myconfig{$_} }
172
        qw(dbname dbhost dbport dbdriver dbuser dbpasswd dbconnect);
177
    map({ $form->{$_} = $myconfig{$_} }
178
        qw(dbname dbhost dbport dbdriver dbuser dbpasswd dbconnect));
179

  
180
    if (update_available($myconfig{"dbdriver"}, $dbversion) ||
181
        update2_available($form, $controls)) {
173 182

  
174 183
      $form->{"stylesheet"} = "lx-office-erp.css";
175 184
      $form->{"title"} = $main::locale->text("Dataset upgrade");
......
185 194
      }
186 195

  
187 196
      # update the tables
188
      open FH, ">$userspath/nologin" or die "
189
$!";
197
      open(FH, ">$userspath/nologin") or die("$!");
190 198

  
191 199
      # required for Oracle
192 200
      $form->{dbdefault} = $sid;
......
196 204
      $SIG{QUIT} = 'IGNORE';
197 205

  
198 206
      $self->dbupdate($form);
207
      $self->dbupdate2($form, $controls);
199 208

  
200 209
      # remove lock file
201
      unlink "$userspath/nologin";
210
      unlink("$userspath/nologin");
202 211

  
203 212
      print($form->parse_html_template("dbupgrade/footer"));
204 213

  
......
453 462
sub process_query {
454 463
  $main::lxdebug->enter_sub();
455 464

  
456
  my ($self, $form, $dbh, $filename, $version) = @_;
465
  my ($self, $form, $dbh, $filename, $version_or_control) = @_;
457 466

  
458 467
  #  return unless (-f $filename);
459 468

  
......
510 519
    }
511 520
  }
512 521

  
513
  if ($version) {
522
  if (ref($version_or_control) eq "HASH") {
523
    $dbh->do("INSERT INTO schema_info (tag, login) VALUES (" .
524
             $dbh->quote($version_or_control->{"tag"}) . ", " .
525
             $dbh->quote($form->{"login"}) . ")");
526
  } elsif ($version_or_control) {
514 527
    $dbh->do("UPDATE defaults SET version = " . $dbh->quote($version));
515 528
  }
516 529
  $dbh->commit();
......
725 738
  return ($#upgradescripts > -1);
726 739
}
727 740

  
741
sub create_schema_info_table {
742
  $main::lxdebug->enter_sub();
743

  
744
  my ($self, $form, $dbh) = @_;
745

  
746
  my $query = "SELECT tag FROM schema_info LIMIT 1";
747
  if (!$dbh->do($query)) {
748
    $query =
749
      "CREATE TABLE schema_info (" .
750
      "  tag text, " .
751
      "  login text, " .
752
      "  itime timestamp DEFAULT now(), " .
753
      "  PRIMARY KEY (tag))";
754
    $dbh->do($query) || $form->dberror($query);
755
  }
756

  
757
  $main::lxdebug->leave_sub();
758
}
759

  
728 760
sub dbupdate {
729 761
  $main::lxdebug->enter_sub();
730 762

  
......
794 826
      last if ($version < $mindb);
795 827

  
796 828
      # apply upgrade
797
      $main::lxdebug->message(DEBUG2, "Appliying Update $upgradescript");
829
      $main::lxdebug->message(DEBUG2, "Applying Update $upgradescript");
798 830
      if ($file_type eq "sql") {
799 831
        $self->process_query($form, $dbh, "sql/" . $form->{"dbdriver"} . "-upgrade/$upgradescript", $str_maxdb);
800 832
      } else {
......
815 847
  return $rc;
816 848
}
817 849

  
850
sub dbupdate2 {
851
  $main::lxdebug->enter_sub();
852

  
853
  my ($self, $form, $controls) = @_;
854

  
855
  $form->{sid} = $form->{dbdefault};
856

  
857
  my @upgradescripts = ();
858
  my ($query, $sth, $tag);
859
  my $rc = -2;
860

  
861
  @upgradescripts = sort_dbupdate_controls($controls);
862

  
863
  foreach my $db (split / /, $form->{dbupdate}) {
864

  
865
    next unless $form->{$db};
866

  
867
    # strip db from dataset
868
    $db =~ s/^db//;
869
    &dbconnect_vars($form, $db);
870

  
871
    my $dbh =
872
      DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
873
      or $form->dberror;
874

  
875
    map({ $_->{"applied"} = 0; } @upgradescripts);
876

  
877
    $query = "SELECT tag FROM schema_info";
878
    $sth = $dbh->prepare($query);
879
    $sth->execute() || $form->dberror($query);
880
    while (($tag) = $sth->fetchrow_array()) {
881
      $controls->{$tag}->{"applied"} = 1 if (defined($controls->{$tag}));
882
    }
883
    $sth->finish();
884

  
885
    my $all_applied = 1;
886
    foreach (@upgradescripts) {
887
      if (!$_->{"applied"}) {
888
        $all_applied = 0;
889
        last;
890
      }
891
    }
892

  
893
    next if ($all_applied);
894

  
895
    foreach my $control (@upgradescripts) {
896
      next if ($control->{"applied"});
897

  
898
      $control->{"file"} =~ /\.(sql|pl)$/;
899
      my $file_type = $1;
900

  
901
      # apply upgrade
902
      $main::lxdebug->message(DEBUG2, "Applying Update $control->{file}");
903
      print($form->parse_html_template("dbupgrade/upgrade_message2",
904
                                       $control));
905

  
906
      if ($file_type eq "sql") {
907
        $self->process_query($form, $dbh, "sql/" . $form->{"dbdriver"} .
908
                             "-upgrade2/$control->{file}", $control);
909
      } else {
910
        $self->process_perl_script($form, $dbh, "sql/" . $form->{"dbdriver"} .
911
                                   "-upgrade2/$control->{file}", $control);
912
      }
913
    }
914

  
915
    $rc = 0;
916
    $dbh->disconnect;
917

  
918
  }
919

  
920
  $main::lxdebug->leave_sub();
921

  
922
  return $rc;
923
}
924

  
925
sub update2_available {
926
  $main::lxdebug->enter_sub();
927

  
928
  my ($form, $controls) = @_;
929

  
930
  map({ $_->{"applied"} = 0; } values(%{$controls}));
931

  
932
  dbconnect_vars($form, $form->{"dbname"});
933

  
934
  my $dbh =
935
    DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) ||
936
    $form->dberror;
937

  
938
  my ($query, $tag, $sth);
939

  
940
  $query = "SELECT tag FROM schema_info";
941
  $sth = $dbh->prepare($query);
942
  $sth->execute() || $form->dberror($query);
943
  while (($tag) = $sth->fetchrow_array()) {
944
    $controls->{$tag}->{"applied"} = 1 if (defined($controls->{$tag}));
945
  }
946
  $sth->finish();
947
  $dbh->disconnect();
948

  
949
  map({ $main::lxdebug->leave_sub() and return 1 if (!$_->{"applied"}) }
950
      values(%{$controls}));
951

  
952
  $main::lxdebug->leave_sub();
953
  return 0;
954
}
955

  
818 956
sub create_config {
819 957
  $main::lxdebug->enter_sub();
820 958

  

Auch abrufbar als: Unified diff