diff --git a/setup/setup.php b/setup/setup.php index 8cd69c94..80d64383 100644 --- a/setup/setup.php +++ b/setup/setup.php @@ -40,7 +40,7 @@ function finish() die("\n"); } -$scriptOpt = getopt('', ['account', 'dbconfig', 'siteconfig', 'sql', 'build', 'sync']); +$scriptOpt = getopt('', ['account', 'dbconfig', 'siteconfig', 'sql', 'build', 'sync', 'update']); if (!$scriptOpt) { echo "\nAowow Setup\n"; @@ -50,6 +50,7 @@ if (!$scriptOpt) echo "--sql : generate db content from your world tables\n"; echo "--build : create server specific files\n"; echo "--sync= : regenerate tables/files that depend on given world-table\n"; + echo "--update : apply new sql updates fetched from github\n"; // echo "--firstrun : goes through the nessecary hoops of the initial setup. Can be interrupted and --resume'd"; echo "additional options\n"; echo "--log logfile : write ouput to file\n"; @@ -65,6 +66,11 @@ else $cmd = array_pop(array_keys($scriptOpt)); switch ($cmd) // we accept only one main parameter { + case 'update': + require_once 'setup/tools/clisetup/update.func.php'; + update(); + + return; case 'account': case 'dbconfig': case 'siteconfig': diff --git a/setup/tools/clisetup/update.func.php b/setup/tools/clisetup/update.func.php new file mode 100644 index 00000000..f4ce13c9 --- /dev/null +++ b/setup/tools/clisetup/update.func.php @@ -0,0 +1,73 @@ +selectCell('SHOW TABLES LIKE "%dbversion"')) + { + DB::Aowow()->query($createQuery); + DB::Aowow()->query('INSERT INTO ?_dbversion VALUES (0, 0)'); + } + else + list($date, $part) = array_values(DB::Aowow()->selectRow('SELECT `date`, `part` FROM ?_dbversion')); + + CLISetup::log('checking sql updates'); + + $nFiles = 0; + foreach (glob('setup/updates/*.sql') as $file) + { + $pi = pathinfo($file); + list($fDate, $fPart) = explode('_', $pi['filename']); + + if ($date && $fDate < $date) + continue; + else if ($part && $date && $fDate == $date && $fPart <= $part) + continue; + + $nFiles++; + + $updQuery = ''; + $nQuerys = 0; + foreach (file($file) as $line) + { + // skip comments + if (substr($line, 0, 2) == '--' || $line == '') + continue; + + $updQuery .= $line; + + // semicolon at the end -> end of query + if (substr(trim($line), -1, 1) == ';') + { + if (DB::Aowow()->query($updQuery)) + $nQuerys++; + + $updQuery = ''; + } + } + + DB::Aowow()->query('UPDATE ?_dbversion SET `date`= ?d, `part` = ?d', $fDate, $fPart); + CLISetup::log(' -> '.date('d.m.Y', $fDate).' #'.$fPart.': '.$nQuerys.' queries applied', CLISetup::LOG_OK); + } + + CLISetup::log($nFiles ? 'applied '.$nFiles.' update(s)' : 'db is already up to date', CLISetup::LOG_OK); +} + +?>