my $parser= new MIME::Parser;
our $entity;
+$|=1;
+
sub find_part ($$$) {
my ($filename, $type, $accepter) = @_;
foreach my $part ($entity->parts()) {
$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 {