1 package BackupPC::Config::Db::MySQL;
3 use base 'BackupPC::Config::Db';
12 %BackupPC::Config::Db::gConfigTypeField =
13 (BOOLEAN => 'valueBit',
15 FLOAT => 'valueFloat',
16 STRING => 'valueString',
23 return if $self->{dbh};
25 my($mesg, %db, $parm, @missing);
27 %db = $self->GetDbConnInfo;
28 return $self->{errstr} if $self->{errstr};
30 foreach $parm (qw(host database user passwd)) {
31 push(@missing, $parm) if !exists $db{$parm}
35 $mesg = "Missing Db connection parameters: "
36 . join(", ", @missing);
40 my $dsn = "DBI:mysql:database=$db{database};host=$db{host}";
42 $self->{dbh} = DBI->connect($dsn, $db{user}, $db{passwd}, {RaiseError => 1,
52 my $cmd = "SHOW TABLE STATUS LIKE 'Config'";
53 my $sth = $self->{dbh}->prepare($cmd);
56 my $row = $sth->fetchrow_hashref || return time();
59 if (defined($mtime = $row->{'Update_time'})) {
60 $mtime =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
62 return &Date_SecsSince1970($2,$3,$1,$4,$5,$6);
71 my $cmd = "SHOW TABLE STATUS LIKE 'Client'";
72 my $sth = $self->{dbh}->prepare($cmd);
75 my $row = $sth->fetchrow_hashref || return time();
78 if (defined($mtime = $row->{'Update_time'})) {
79 return &Date_SecsSince1970($mtime);
85 # Date subs borrowed from Date::Manip.
86 # Copyright (c) 1995-2001 Sullivan Beck. All rights reserved.
87 # This program is free software; you can redistribute it and/or modify it
88 # under the same terms as Perl itself.
90 sub Date_SecsSince1970
93 $mysqlDate =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
95 my($y,$m,$d,$h,$mn,$s) = ($1,$2,$3,$4,$5,$6);
96 my($sec_now,$sec_70,$Ny,$N4,$N100,$N400,$dayofyear,$days)=();
99 $y=~ /(\d{2})(\d{2})/;
111 $N400=($N100-1)/4 + 1;
114 my(@days) = ( 0, 31, 59, 90,120,151,181,212,243,273,304,334,365);
116 $ly=1 if ($m>2 && &Date_LeapYear($y));
118 $dayofyear=$days[$m-1]+$d+$ly;
119 $days= $Ny*365 + $N4 - $N100 + $N400 + $dayofyear;
120 $sec_now=($days-1)*24*3600 + $h*3600 + $mn*60 + $s;
121 $sec_70 =62167219200;
122 return ($sec_now-$sec_70);
129 return 1 if $y % 100;
130 return 0 if $y % 400;