Initial add of specialized Config modules. Some parts are not fully implemented.
[BackupPC.git] / lib / BackupPC / Config / Db / MySQL.pm
diff --git a/lib/BackupPC/Config/Db/MySQL.pm b/lib/BackupPC/Config/Db/MySQL.pm
new file mode 100644 (file)
index 0000000..dfb21cb
--- /dev/null
@@ -0,0 +1,111 @@
+package BackupPC::Config::Db::MySQL;
+
+use base 'BackupPC::Config::Db';
+use warnings;
+use strict;
+
+use DBI;
+use DBD::mysql;
+
+%BackupPC::Config::Db::gConfigTypeField =
+    (BOOLEAN   => 'valueBit',
+     INT       => 'valueInt',
+     FLOAT     => 'valueFloat',
+     STRING    => 'valueString',
+     MEMO      => 'valueMemo',
+    );
+
+sub ConnectData {
+   my($self) = @_;
+
+   my $dsn = 'DBI:mysql:database=backuppc;host=reagan';
+   $self->{dbh} = DBI->connect($dsn, 'root', undef, {RaiseError => 1,
+                               AutoCommit => 1,});
+}
+
+sub ConfigMTime {
+   my($self) = @_;
+return time();
+   my $cmd = "SHOW TABLE STATUS LIKE 'Config'";
+   my $sth = $self->{dbh}->prepare($cmd);
+
+   $sth->execute;
+   my $row = $sth->fetchrow_hashref || return time();
+   my $mtime;
+
+   if (defined($mtime = $row->{'Update_time'})) {
+      $mtime =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
+        || return time();
+      return &Date_SecsSince1970($2,$3,$1,$4,$5,$6);
+   } else {
+      return time();
+   }
+}
+
+sub HostsMTime {
+   my($self) = @_;
+return time();
+   my $cmd = "SHOW TABLE STATUS LIKE 'Client'";
+   my $sth = $self->{dbh}->prepare($cmd);
+
+   $sth->execute;
+   my $row = $sth->fetchrow_hashref || return time();
+   my $mtime;
+
+   if (defined($mtime = $row->{'Update_time'})) {
+      return &Date_SecsSince1970($mtime);
+   } else {
+      return time();
+   }
+}
+
+# Date subs borrowed from Date::Manip.
+# Copyright (c) 1995-2001 Sullivan Beck.  All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+sub Date_SecsSince1970 {
+  my($mysqlDate) = @_;
+  $mysqlDate =~ m/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
+    || return time();
+  my($y,$m,$d,$h,$mn,$s) = ($1,$2,$3,$4,$5,$6);
+  my($sec_now,$sec_70,$Ny,$N4,$N100,$N400,$dayofyear,$days)=();
+  my($cc,$yy)=();
+
+  $y=~ /(\d{2})(\d{2})/;
+  ($cc,$yy)=($1,$2);
+
+  $Ny=$y;
+
+  $N4=($Ny-1)/4 + 1;
+  $N4=0         if ($y==0);
+
+  $N100=$cc + 1;
+  $N100--       if ($yy==0);
+  $N100=0       if ($y==0);
+
+  $N400=($N100-1)/4 + 1;
+  $N400=0       if ($y==0);
+
+  my(@days) = ( 0, 31, 59, 90,120,151,181,212,243,273,304,334,365);
+  my($ly)=0;
+  $ly=1  if ($m>2 && &Date_LeapYear($y));
+
+  $dayofyear=$days[$m-1]+$d+$ly;
+  $days= $Ny*365 + $N4 - $N100 + $N400 + $dayofyear;
+  $sec_now=($days-1)*24*3600 + $h*3600 + $mn*60 + $s;
+  $sec_70 =62167219200;
+  return ($sec_now-$sec_70);
+}
+
+sub Date_LeapYear {
+  my($y)=@_;
+  return 0 if $y % 4;
+  return 1 if $y % 100;
+  return 0 if $y % 400;
+  return 1;
+}
+
+
+
+1;