#!/usr/bin/perl -w # # usage: ./db-idempotent-populate # creates or updates OCEAN-Oceanname.db # from master-master.txt # This is part of ypp-sc-tools, a set of third-party tools for assisting # players of Yohoho Puzzle Pirates. # # Copyright (C) 2009 Ian Jackson # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Yohoho and Puzzle Pirates are probably trademarks of Three Rings and # are used without permission. This program is not endorsed or # sponsored by Three Rings. use strict (qw(vars)); use DBI; use Commods; @ARGV==1 or die; my ($ocean) = @ARGV; my $dbfn= "OCEAN-$ocean.db"; our $dbh; sub dbdoall ($) { foreach my $cmd (split /\;/, $_[0]) { $dbh->do("$cmd;") if $cmd =~ m/\S/; } } $dbh= DBI->connect("dbi:SQLite:$dbfn",'','', { AutoCommit=>0, RaiseError=>1, ShowErrorStatement=>1, unicode=>1 }) or die "$dbfn $DBI::errstr ?"; foreach my $bs (qw(buy sell)) { dbdoall(<commit; parse_masters(); { my $sth= $dbh->prepare(<<'END') INSERT OR IGNORE INTO commodities (commodname) values (?); END ; foreach my $commod (sort keys %commods) { $sth->execute($commod); } $dbh->commit; }