#!/usr/bin/perl -w # # Normally run from # update-master-info # # 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; use CommodsDatabase; @ARGV==1 or die; my ($oceanname) = @ARGV; #---------- setup ---------- parse_info_serverside(); db_setocean($oceanname); db_writer(); db_connect(); #---------- schema ---------- foreach my $bs (qw(buy sell)) { db_doall(<commit; #---------- commodity list ---------- { my $insert= $dbh->prepare(<<'END') INSERT OR IGNORE INTO commods (unitmass, unitvolume, commodname) VALUES (?,?,?); END ; my $update= $dbh->prepare(<<'END') UPDATE commods SET unitmass = ?, unitvolume = ? WHERE commodname = ? END ; foreach my $commod (sort keys %commods) { my $c= $commods{$commod}; die "no mass for $commod" unless defined $c->{Mass}; die "no colume for $commod" unless defined $c->{Volume}; my @qa= ($c->{Mass}, $c->{Volume}, $commod); $insert->execute(@qa); $update->execute(@qa); } $dbh->commit; } #---------- vessel types ---------- { my $idempotent= $dbh->prepare(<<'END') INSERT OR REPLACE INTO vessels (name, shot, mass, volume) VALUES (?,?,?,?) END ; foreach my $name (sort keys %vessels) { my $v= $vessels{$name}; my $shotdamage= $shotname2damage{$v->{Shot}}; die "no shot damage for shot $v->{Shot} for vessel $name" unless defined $shotdamage; my @qa= ($name, $shotdamage, map { $v->{$_} } qw(Mass Volume)); $idempotent->execute(@qa); } $dbh->commit; }