Revision 21c607d3
Von Moritz Bunkus vor fast 18 Jahren hinzugefügt
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
Datenbankupgradescripte koennen jetzt auch Perlscripte und nicht nur SQL-Scripte sein.