chiark / gitweb /
"out of office" -> away message
[nj-awaymsg.git] / AwayMsg.pm
index 468e9f072b15005c7658dc1009bea3d126a2dea9..1fa389908d2e7322f0ddceb70835c5869b452c1b 100644 (file)
@@ -1,48 +1,58 @@
-module AwayMsg;
 
 package AwayMsg;
+
 use strict;
 use warnings;
 
+use DBI;
+use Data::Dumper;
+
 BEGIN {
     use Exporter ();
     our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
     $VERSION     = 1.00;
     @ISA         = qw(Exporter);
-    @EXPORT      = qw(&db_connect $dhb);
+    @EXPORT      = qw(db_connect db_commit
+                      $dbh);
     %EXPORT_TAGS = ( );
     @EXPORT_OK   = qw();
 }
 
+our ($dbh);
+
 sub db_connect () {
-    my $h = DBI->connect("dbi:SQLite:away.db",
+    my $dbf;
+    foreach my $d (@INC) {
+       $dbf = "$d/away.db";
+       if (stat $dbf) {
+           chdir($d) or die $!;
+           last;
+       }
+    }
+    $dbh = DBI->connect("dbi:SQLite:away.db",
                         { AutoCommit=>0,
                           RaiseError=>1, ShowErrorStatement=>1
                         })
-        or die "$DBI:errstr ?";
-
-    $dbh->do("BEGIN");
-
-    $dbh->do("CREATE TEMPORARY TABLE config (".
-            " emailaddr TEXT PRIMARY KEY NOT NULL,".
-            " username TEXT NOT NULL,".
-            " forwardfile TEXT NOT NULL".
-            ")");
-
-    open C, "config" or die $!;
-    while (<C>) {
-       s/^\s+//;
-       next if m/^\#/;
-       chomp or die;
-       s/\s+$//;
-       my @s = split;
-       die "$_ ?" unless @s==3;
-       $dbh->do("INSERT INTO config".
-                " (emailaddr, username, forwardfile)".
-                " VALUES (?,?,?)",
-                {}, @s);
+        or die "$DBI::errstr ?";
+}
+
+sub nooutput ($) {
+    my ($stmt) = @_;
+    my $sth= $dbh->prepare($stmt);
+    $sth->execute();
+    my $row;
+    if ($row= $sth->fetchrow_hashref()) {
+       die("REFERENTIAL INTEGRITY ERROR\n".
+           "\n$stmt\n". Dumper($row),"\n");
     }
-    $dbh->do("COMMIT");
+}
 
-    return $h;
+sub db_commit () {
+    nooutput("SELECT * FROM addresses LEFT JOIN config".
+            " USING (emailaddr) WHERE forwardfile IS NULL");
+    nooutput("SELECT * FROM addresses LEFT JOIN texts".
+            " USING (textid) WHERE desc IS NULL");
+    $dbh->do("COMMIT");
 }
+
+1;