Revision 4fd8bdbf
Von Moritz Bunkus vor fast 18 Jahren hinzugefügt
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
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.