Initial add of specialized Config modules. Some parts are not fully implemented.
[BackupPC.git] / lib / BackupPC / Config / Db / MySQL.pm
1 package BackupPC::Config::Db::MySQL;
2
3 use base 'BackupPC::Config::Db';
4 use warnings;
5 use strict;
6
7 use DBI;
8 use DBD::mysql;
9
10 %BackupPC::Config::Db::gConfigTypeField =
11     (BOOLEAN   => 'valueBit',
12      INT       => 'valueInt',
13      FLOAT     => 'valueFloat',
14      STRING    => 'valueString',
15      MEMO      => 'valueMemo',
16     );
17
18 sub ConnectData {
19    my($self) = @_;
20
21    my $dsn = 'DBI:mysql:database=backuppc;host=reagan';
22    $self->{dbh} = DBI->connect($dsn, 'root', undef, {RaiseError => 1,
23                                AutoCommit => 1,});
24 }
25
26 sub ConfigMTime {
27    my($self) = @_;
28 return time();
29    my $cmd = "SHOW TABLE STATUS LIKE 'Config'";
30    my $sth = $self->{dbh}->prepare($cmd);
31
32    $sth->execute;
33    my $row = $sth->fetchrow_hashref || return time();
34    my $mtime;
35
36    if (defined($mtime = $row->{'Update_time'})) {
37       $mtime =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
38         || return time();
39       return &Date_SecsSince1970($2,$3,$1,$4,$5,$6);
40    } else {
41       return time();
42    }
43 }
44
45 sub HostsMTime {
46    my($self) = @_;
47 return time();
48    my $cmd = "SHOW TABLE STATUS LIKE 'Client'";
49    my $sth = $self->{dbh}->prepare($cmd);
50
51    $sth->execute;
52    my $row = $sth->fetchrow_hashref || return time();
53    my $mtime;
54
55    if (defined($mtime = $row->{'Update_time'})) {
56       return &Date_SecsSince1970($mtime);
57    } else {
58       return time();
59    }
60 }
61
62 # Date subs borrowed from Date::Manip.
63 # Copyright (c) 1995-2001 Sullivan Beck.  All rights reserved.
64 # This program is free software; you can redistribute it and/or modify it
65 # under the same terms as Perl itself.
66
67 sub Date_SecsSince1970 {
68   my($mysqlDate) = @_;
69   $mysqlDate =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
70     || return time();
71   my($y,$m,$d,$h,$mn,$s) = ($1,$2,$3,$4,$5,$6);
72   my($sec_now,$sec_70,$Ny,$N4,$N100,$N400,$dayofyear,$days)=();
73   my($cc,$yy)=();
74
75   $y=~ /(\d{2})(\d{2})/;
76   ($cc,$yy)=($1,$2);
77
78   $Ny=$y;
79
80   $N4=($Ny-1)/4 + 1;
81   $N4=0         if ($y==0);
82
83   $N100=$cc + 1;
84   $N100--       if ($yy==0);
85   $N100=0       if ($y==0);
86
87   $N400=($N100-1)/4 + 1;
88   $N400=0       if ($y==0);
89
90   my(@days) = ( 0, 31, 59, 90,120,151,181,212,243,273,304,334,365);
91   my($ly)=0;
92   $ly=1  if ($m>2 && &Date_LeapYear($y));
93
94   $dayofyear=$days[$m-1]+$d+$ly;
95   $days= $Ny*365 + $N4 - $N100 + $N400 + $dayofyear;
96   $sec_now=($days-1)*24*3600 + $h*3600 + $mn*60 + $s;
97   $sec_70 =62167219200;
98   return ($sec_now-$sec_70);
99 }
100
101 sub Date_LeapYear {
102   my($y)=@_;
103   return 0 if $y % 4;
104   return 1 if $y % 100;
105   return 0 if $y % 400;
106   return 1;
107 }
108
109
110
111 1;