Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 21c607d3

Von Moritz Bunkus vor fast 18 Jahren hinzugefügt

  • ID 21c607d313926d20d39aa16df01a31f6580ffe6c
  • Vorgänger 0e50c3d8
  • Nachfolger 0b1a0aa1

Datenbankupgradescripte koennen jetzt auch Perlscripte und nicht nur SQL-Scripte sein.

Unterschiede anzeigen:

SL/User.pm
380 380
  $filename = qq|sql/$form->{chart}-chart.sql|;
381 381
  $self->process_query($form, $dbh, $filename);
382 382

  
383
  # create indices
384
  # Indices sind auch in lx-office.sql
385
  # $filename = qq|sql/$form->{dbdriver}-indices.sql|;
386
  # $self->process_query($form, $dbh, $filename);
387

  
388 383
  $dbh->disconnect;
389 384

  
390 385
  $main::lxdebug->leave_sub();
391 386
}
392 387

  
388
# Process a Perl script which updates the database.
389
# If the script returns 1 then the update was successful.
390
# Return code "2" means "needs more interaction; remove
391
# users/nologin and exit".
392
# All other return codes are fatal errors.
393
sub process_perl_script {
394
  $main::lxdebug->enter_sub();
395

  
396
  my ($self, $form, $dbh, $filename, $version) = @_;
397

  
398
  open(FH, "$filename") or $form->error("$filename : $!\n");
399
  my $contents = join("", <FH>);
400
  close(FH);
401

  
402
  $dbh->begin_work();
403

  
404
  my $result = eval($contents);
405

  
406
  if (1 != $result) {
407
    $dbh->rollback();
408
    $dbh->disconnect();
409
  }
410

  
411
  if (!defined($result)) {
412
    $form->dberror("The database update/creation did not succeed. The file ${filename} containing the following syntax error:<br>${@}<br>" .
413
                   "All changes in that file have been reverted.");
414
  } elsif (1 != $result) {
415
    unlink("users/nologin") if (2 == $result);
416
    exit(0);
417
  }
418

  
419
  if ($version) {
420
    $dbh->do("UPDATE defaults SET version = " . $dbh->quote($version));
421
  }
422
  $dbh->commit();
423

  
424
  $main::lxdebug->leave_sub();
425
}
426

  
393 427
sub process_query {
394 428
  $main::lxdebug->enter_sub();
395 429

  
......
659 693

  
660 694
  opendir SQLDIR, "sql/${dbdriver}-upgrade" or &error("", "sql/${dbdriver}-upgrade: $!");
661 695
  my @upgradescripts =
662
    grep(/$form->{dbdriver}-upgrade-\Q$cur_version\E.*\.sql/, readdir(SQLDIR));
696
    grep(/$form->{dbdriver}-upgrade-\Q$cur_version\E.*\.(sql|pl)/, readdir(SQLDIR));
663 697
  closedir SQLDIR;
664 698

  
665 699
  return ($#upgradescripts > -1);
......
683 717
    ## LINET
684 718
    @upgradescripts =
685 719
      sort(cmp_script_version
686
           grep(/$form->{dbdriver}-upgrade-.*?\.sql$/, readdir(SQLDIR)));
720
           grep(/$form->{dbdriver}-upgrade-.*?\.(sql|pl)$/, readdir(SQLDIR)));
687 721
    ## /LINET
688 722
    closedir SQLDIR;
689 723
  }
......
718 752

  
719 753
    foreach my $upgradescript (@upgradescripts) {
720 754
      my $a = $upgradescript;
721
      $a =~ s/^$form->{dbdriver}-upgrade-|\.sql$//g;
755
      $a =~ s/^$form->{dbdriver}-upgrade-|\.(sql|pl)$//g;
756
      my $file_type = $1;
722 757

  
723 758
      my ($mindb, $maxdb) = split /-/, $a;
724 759
      my $str_maxdb = $maxdb;
......
734 769

  
735 770
      # apply upgrade
736 771
      $main::lxdebug->message(DEBUG2, "Appliying Update $upgradescript");
737
      $self->process_query($form, $dbh, "sql/" . $form->{"dbdriver"} . "-upgrade/$upgradescript", $str_maxdb);
772
      if ($file_type eq "sql") {
773
        $self->process_query($form, $dbh, "sql/" . $form->{"dbdriver"} . "-upgrade/$upgradescript", $str_maxdb);
774
      } else {
775
        $self->process_perl_script($form, $dbh, "sql/" . $form->{"dbdriver"} . "-upgrade/$upgradescript", $str_maxdb);
776
      }
738 777

  
739 778
      $version = $maxdb;
740 779

  

Auch abrufbar als: Unified diff