From a9583fa8a29e889f435ee4d6cf3dc6a5979a6bd5 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 9 Aug 2009 21:35:58 +0100 Subject: [PATCH] Remove the clone-and-hack database initialisation from web scripts --- .gitignore | 1 + yarrg/CommodsDatabase.pm | 9 +++++-- yarrg/CommodsWeb.pm | 56 ++++++++++++++++++++++++++++++++++++++++ yarrg/web/pirate-island | 17 +++--------- yarrg/web/pirates | 19 +++++--------- 5 files changed, 73 insertions(+), 29 deletions(-) create mode 100644 yarrg/CommodsWeb.pm diff --git a/.gitignore b/.gitignore index 5796988..a058839 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ yarrg/yarrg yarrg/_*.* yarrg/OCEAN-*.db yarrg/Writer.lock +yarrg/DATA diff --git a/yarrg/CommodsDatabase.pm b/yarrg/CommodsDatabase.pm index 6f2f627..2ea674d 100644 --- a/yarrg/CommodsDatabase.pm +++ b/yarrg/CommodsDatabase.pm @@ -44,7 +44,7 @@ BEGIN { $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = qw(&db_setocean &db_writer &db_connect $dbh - &db_filename &db_doall &db_onconflict); + &db_filename &db_doall &db_onconflict &db_setdatadir); %EXPORT_TAGS = ( ); @EXPORT_OK = qw(); @@ -52,10 +52,14 @@ BEGIN { our $dbfn; our $dbh; +our $datadir= '.'; +sub db_setdatadir ($) { + $datadir= $_[0]; +} sub db_setocean ($) { my ($oceanname) = @_; - $dbfn= "OCEAN-$oceanname.db"; + $dbfn= "$datadir/OCEAN-$oceanname.db"; } sub db_filename () { return $dbfn; @@ -89,6 +93,7 @@ sub db_writer () { } sub db_connect () { + return if $dbh; $dbh= DBI->connect("dbi:SQLite:$dbfn",'','', { AutoCommit=>0, RaiseError=>1, ShowErrorStatement=>1, diff --git a/yarrg/CommodsWeb.pm b/yarrg/CommodsWeb.pm new file mode 100644 index 0000000..3e3b59e --- /dev/null +++ b/yarrg/CommodsWeb.pm @@ -0,0 +1,56 @@ +# 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. + +# This package is used by the Mason scripts in yarrg/web/. +# We look for a symlink DATA to the actual data to use, so that +# the data uploader and website displayer can use different code. + +package CommodsWeb; + +use strict; +use warnings; + +use DBI; +use POSIX; + +use Commods; +use CommodsDatabase; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + $VERSION = 1.00; + @ISA = qw(Exporter); + @EXPORT = qw(); + %EXPORT_TAGS = ( ); + + @EXPORT_OK = qw(); +} + +for my $dir (@INC) { + if ($dir =~ m/\.perl-lib$/) { + db_setdatadir("$dir/DATA"); + last; + } +} + +1; diff --git a/yarrg/web/pirate-island b/yarrg/web/pirate-island index a41410e..67b4cfb 100644 --- a/yarrg/web/pirate-island +++ b/yarrg/web/pirate-island @@ -16,18 +16,7 @@ $sth->execute(); <%init> - -use DBI; - -our $dbh; -our $dbfn; -$dbfn= "/home/ijackson/things/ypp-sc-tools.pctb-dict-test/yarrg/OCEAN-Midnight.db"; - - $dbh=DBI->connect("dbi:SQLite:$dbfn",'','', - { AutoCommit=>0, - RaiseError=>1, ShowErrorStatement=>1, - unicode=>1 }) - or die "$dbfn $DBI::errstr ?" - unless $dbh; - +use CommodsWeb; +db_setocean('Midnight'); +db_connect(); diff --git a/yarrg/web/pirates b/yarrg/web/pirates index 5378cf4..158239d 100644 --- a/yarrg/web/pirates +++ b/yarrg/web/pirates @@ -21,19 +21,6 @@ $sth->execute(); - -use DBI; - -our $dbh; -our $dbfn; -$dbfn= "/home/ijackson/things/ypp-sc-tools.pctb-dict-test/yarrg/OCEAN-Midnight.db"; - $dbh=DBI->connect("dbi:SQLite:$dbfn",'','', - { AutoCommit=>0, - RaiseError=>1, ShowErrorStatement=>1, - unicode=>1 }) - or die "$dbfn $DBI::errstr ?"; - # default timeout is 30s which is plenty - my $sth=$dbh->prepare( "SELECT a.commodname,b.price,c.price,d.stallname,e.islandname FROM commods as a @@ -64,3 +51,9 @@ $sth->execute(); + +<%init> +use CommodsWeb; +db_setocean('Midnight'); +db_connect(); + -- 2.30.2