From f6d15ca78e16217b709d69f2977b28dd1eeabc02 Mon Sep 17 00:00:00 2001 From: Thomas Hochstein Date: Sat, 18 Sep 2010 19:02:46 +0200 Subject: [PATCH 1/1] Add upgrade path. NewsStats.pm: Add $PackageVersion. install.pl: Modularise program flow to subroutines. Add framework for database upgrade and upgrade instructions. Signed-off-by: Thomas Hochstein --- NewsStats.pm | 4 +- install/install.pl | 133 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 106 insertions(+), 31 deletions(-) diff --git a/NewsStats.pm b/NewsStats.pm index a8c5b7b..3efc14b 100644 --- a/NewsStats.pm +++ b/NewsStats.pm @@ -18,6 +18,7 @@ require Exporter; @EXPORT = qw( $MySelf $MyVersion + $PackageVersion ReadOptions ReadConfig OverrideConfig @@ -40,6 +41,7 @@ require Exporter; Output => [qw(OutputData FormatOutput)], SQLHelper => [qw(SQLHierarchies SQLGroupList GetMaxLenght)]); $VERSION = '0.1'; +our $PackageVersion = '0.1'; use Data::Dumper; use File::Basename; @@ -82,7 +84,7 @@ sub ReadOptions { sub ShowVersion { ################################################################################ ### display version and exit - print "$MyVersion\nCopyright (c) 2010 Thomas Hochstein \n"; + print "NewsStats v$PackageVersion\n$MyVersion\nCopyright (c) 2010 Thomas Hochstein \n"; print "This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.\n"; exit(100); }; diff --git a/install/install.pl b/install/install.pl index d45d911..b14f59a 100755 --- a/install/install.pl +++ b/install/install.pl @@ -28,10 +28,11 @@ use DBI; ################################# Main program ################################# ### read commandline options -my %Options = &ReadOptions(''); +my %Options = &ReadOptions('u:'); ### change working directory to .. (as we're in .../install) chdir dirname($0).'/..'; +my $Path = cwd(); ### read configuration print("Reading configuration.\n"); @@ -82,35 +83,12 @@ CREATE TABLE IF NOT EXISTS `$Conf{'DBTableGrps'}` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Postings per newsgroup'; GRPS -##### --------------------------- End of definitions --------------------------- - -### create database tables -print "-----\nStarting database table generation.\n"; -# DB init -my $DBHandle = InitDB(\%Conf,1); - -# read tables -my %TablesInDB = %{$DBHandle->table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')}; - -# check for tables and create them, if they don't exist yet -foreach my $Table (keys %DBCreate) { - if (defined($TablesInDB{$Conf{$Table}})) { - printf("Database table %s.%s already exists, skipping ....\n",$Conf{'DBDatabase'},$Conf{$Table}); - next; - }; - my $DBQuery = $DBHandle->prepare($DBCreate{$Table}); - $DBQuery->execute() or die sprintf("$MySelf: E: Can't create table %s in database %s: %s%\n",$Table,$Conf{'DBDatabase'},$DBI::errstr); - printf("Database table %s.%s created succesfully.\n",$Conf{'DBDatabase'},$Conf{$Table}); -}; - -# close handle -$DBHandle->disconnect; -print "Database table generation done.\n"; +##### -------------------------------------------------------------------------- +##### Installation / upgrade instructions +##### -------------------------------------------------------------------------- -### output information on other necessary steps -my $Path = cwd(); -print < -TODO +INSTALL + +my $Upgrade = < 0.02 +$DBUpgrade{'0.02'} = <table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')}; + +if (!$Options{'u'}) { + ##### installation mode + print "----------\nStarting database table generation.\n"; + # check for tables and create them, if they don't exist yet + foreach my $Table (keys %DBCreate) { + &CreateTable($Table); + }; + print "Database table generation done.\n"; + + # Display install instructions + print $Install; +} else { + ##### upgrade mode + print "----------\nStarting upgrade process.\n"; + if ($Options{'u'} < $PackageVersion) { + # Database upgrades for each version + foreach my $UpVersion (sort keys %DBUpgrade) { + if ($UpVersion > $Options{'u'} and $UpVersion <= $PackageVersion) { + print "v$UpVersion: Executing database upgrade ...\n"; + &DoMySQL($DBUpgrade{$UpVersion}); + }; + }; + # Display upgrade instructions for each version + foreach my $UpVersion (sort keys %Instructions) { + if ($UpVersion > $Options{'u'} and $UpVersion <= $PackageVersion) { + print "v$UpVersion: Upgrade Instructions >>>>>\n"; + my $Padding = ' ' x (length($UpVersion) + 3); + $Instructions{$UpVersion} =~ s/^/$Padding/; + print $Instructions{$UpVersion}; + print "<" x (length($UpVersion) + 29) . "\n"; + }; + }; + }; + # Display upgrade instructions + print $Upgrade; +}; + +# close handle +$DBHandle->disconnect; + +exit(0); + +################################# Subroutines ################################## + +sub CreateTable() { + my $Table = shift; + if (defined($TablesInDB{$Conf{$Table}})) { + printf("Database table %s.%s already exists, skipping ....\n",$Conf{'DBDatabase'},$Conf{$Table}); + return; + }; + my $DBQuery = $DBHandle->prepare($DBCreate{$Table}); + $DBQuery->execute() or die sprintf("$MySelf: E: Can't create table %s in database %s: %s%\n",$Table,$Conf{'DBDatabase'},$DBI::errstr); + printf("Database table %s.%s created succesfully.\n",$Conf{'DBDatabase'},$Conf{$Table}); + return; +}; + +sub DoMySQL() { + my $SQL = shift; + my $DBQuery = $DBHandle->prepare($SQL); + $DBQuery->execute() or warn sprintf("$MySelf: E: Database error: %s\n",$DBI::errstr); + return; +}; + __END__ -- 2.20.1