chiark / gitweb /
Can actually update the database
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Tue, 28 Jul 2009 19:06:22 +0000 (20:06 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Tue, 28 Jul 2009 19:06:22 +0000 (20:06 +0100)
pctb/commod-email-processor

index b7883fc..8a9bac4 100755 (executable)
@@ -56,6 +56,8 @@ setlocale(LC_CTYPE, "en_GB.UTF-8");
 my $parser= new MIME::Parser;
 our $entity;
 
+$|=1;
+
 sub find_part ($$$) {
     my ($filename, $type, $accepter) = @_;
     foreach my $part ($entity->parts()) {
@@ -132,37 +134,53 @@ sub main () {
             $islandid, $mid,
             map { $md{$_} } (qw(timestamp clientspec serverspec)));
 
-    my %sth_cs;
-    foreach my $cs (qw(commod stall)) {
-       $sth_cs{$cs}= $dbh->prepare(
+    my $sth_stall= $dbh->prepare(
                 "INSERT OR IGNORE
-                        INTO ${cs}s
-                        (${cs}id) VALUES (?)
+                        INTO stalls
+                        (islandid, stallname) VALUES (?, ?)
                 ");
-    }
 
-    my %sth_bs;
+    my @v;
+
+    my %sub_bs;
     foreach my $bs (qw(buy sell)) {
-       $sth_bs{$bs}= $dbh->prepare(
+       my $sth= $dbh->prepare(
               "INSERT INTO $bs
-                       (commodid, islandid, stallid, price, qty)
+                       (commodid, stallid, islandid, price, qty)
                        VALUES (
                         (SELECT commodid FROM commods WHERE commodname = ?),
-                        $islandid,
-                        (SELECT stallid  FROM stalls  WHERE stallname = ?),
-                        ?, ?
+                        (SELECT stallid  FROM stalls  WHERE stallname =  ?),
+                        ?, ?, ?
                        )
                ");
+       $sub_bs{$bs}= sub {
+           my ($priceix) = @_;
+           my $price= $v[$priceix];  return if !length $price;
+           my $qty= $v[$priceix+1];
+           $qty++ if $qty =~ s/^\>//;
+           $sth->execute(@v[0..1],$islandid,$price,$qty);
+       }           
     }
 
     while (<$pt>) {
-       my @v= check_tsv_line($_, \&bad_data_fail);
+       @v= check_tsv_line($_, \&bad_data_fail);
+
+       $sth_stall->execute($islandid, $v[1]);
 
-       
+       &{$sub_bs{'buy'}}(2);
+       &{$sub_bs{'sell'}}(4);
+
+#      print ".";
     }
 
     pipethrough_run_finish($pt, 'gunzip <$deduped_tsv.gz');
 
+    print "\n";
+    $dbh->commit();
+
+    # select * from ((buy natural join commods) natural join stalls) natural join islands;
+    # select * from ((sell natural join commods) natural join stalls) natural join islands;
+
 }
 
 my $ok= eval {