647 |
647 |
|
648 |
648 |
$form->{sid} = $form->{dbdefault};
|
649 |
649 |
|
650 |
|
my @upgradescripts = ();
|
651 |
|
my ($query, $sth, $tag);
|
652 |
|
my $rc = -2;
|
653 |
|
|
654 |
|
@upgradescripts = $dbupdater->sort_dbupdate_controls;
|
|
650 |
my $rc = -2;
|
|
651 |
my $db_charset = $main::dbcharset || Common::DEFAULT_CHARSET;
|
655 |
652 |
|
656 |
|
my $db_charset = $main::dbcharset;
|
657 |
|
$db_charset ||= Common::DEFAULT_CHARSET;
|
|
653 |
map { $_->{description} = SL::Iconv::convert($_->{charset}, $db_charset, $_->{description}) } values %{ $dbupdater->{all_controls} };
|
658 |
654 |
|
659 |
655 |
foreach my $db (split / /, $form->{dbupdate}) {
|
660 |
|
|
661 |
656 |
next unless $form->{$db};
|
662 |
657 |
|
663 |
658 |
# strip db from dataset
|
664 |
659 |
$db =~ s/^db//;
|
665 |
660 |
&dbconnect_vars($form, $db);
|
666 |
661 |
|
667 |
|
my $dbh =
|
668 |
|
DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
|
669 |
|
or $form->dberror;
|
|
662 |
my $dbh = DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) or $form->dberror;
|
670 |
663 |
|
671 |
664 |
$dbh->do($form->{dboptions}) if ($form->{dboptions});
|
672 |
665 |
|
673 |
|
map({ $_->{"applied"} = 0; } @upgradescripts);
|
674 |
|
|
675 |
666 |
$self->create_schema_info_table($form, $dbh);
|
676 |
667 |
|
677 |
|
$query = qq|SELECT tag FROM schema_info|;
|
678 |
|
$sth = $dbh->prepare($query);
|
679 |
|
$sth->execute() || $form->dberror($query);
|
680 |
|
while (($tag) = $sth->fetchrow_array()) {
|
681 |
|
$dbupdater->{all_controls}->{$tag}->{"applied"} = 1 if (defined($dbupdater->{all_controls}->{$tag}));
|
682 |
|
}
|
683 |
|
$sth->finish();
|
684 |
|
|
685 |
|
my $all_applied = 1;
|
686 |
|
foreach (@upgradescripts) {
|
687 |
|
if (!$_->{"applied"}) {
|
688 |
|
$all_applied = 0;
|
689 |
|
last;
|
690 |
|
}
|
691 |
|
}
|
|
668 |
my @upgradescripts = $dbupdater->unapplied_upgrade_scripts($dbh);
|
692 |
669 |
|
693 |
|
next if ($all_applied);
|
|
670 |
$dbh->disconnect and next if !@upgradescripts;
|
694 |
671 |
|
695 |
672 |
foreach my $control (@upgradescripts) {
|
696 |
|
next if ($control->{"applied"});
|
697 |
|
|
698 |
|
$control->{description} = SL::Iconv::convert($control->{charset}, $db_charset, $control->{description});
|
699 |
|
|
700 |
|
$control->{"file"} =~ /\.(sql|pl)$/;
|
701 |
|
my $file_type = $1;
|
702 |
|
|
703 |
673 |
# apply upgrade
|
704 |
674 |
$main::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $control->{file}");
|
705 |
675 |
print $form->parse_html_template("dbupgrade/upgrade_message2", $control);
|
DRY