science-ation/db/db_update.php
dave 3904e2d9d8 - Allow the update script to include a PHP script too. The PHP script, called
db.update.$num.php, may contain 2 functions  db_update_pre() and
  db_update_post()  which are run before(pre) and after(post) the SQL file is
  applied.  If the php script doesn't exist, the behaviour of the update script
  is unchanged.
2007-11-16 21:42:45 +00:00

97 lines
2.4 KiB
PHP

<?
if(!function_exists("system")) {
echo "DB Update requires php's system() function to be available\n";
exit;
}
//include the config.inc.php
//so we have the db connection info
require("../data/config.inc.php");
echo "<pre>\n";
if(file_exists("db.code.version.txt"))
{
$dbcodeversion_file=file("db.code.version.txt");
$dbcodeversion=trim($dbcodeversion_file[0]);
}
else
{
echo "Couldnt load current db.code.version.txt\n";
exit;
}
mysql_connect($DBHOST,$DBUSER,$DBPASS);
mysql_select_db($DBNAME);
$q=mysql_query("SELECT val FROM config WHERE var='DBVERSION' AND year='0'");
$r=mysql_fetch_object($q);
$dbdbversion=$r->val;
if(!$dbdbversion)
{
echo "Couldnt get current db version. Is SFIAB properly installed?\n";
exit;
}
if($dbcodeversion && $dbdbversion)
{
//lets see if they match
if($dbcodeversion == $dbdbversion)
{
echo "DB and CODE are all up-to-date. Version: $dbdbversion\n";
exit;
}
else if($dbcodeversion<$dbdbversion)
{
echo "ERROR: dbcodeversion<dbdbversion ($dbcodeversion<$dbdbversion). This should not happen!";
exit;
}
else if($dbcodeversion>$dbdbversion)
{
echo "DB update requirements detected\n";
echo "Current DB Version: $dbdbversion\n";
echo "Current CODE Version: $dbcodeversion\n";
echo "Updating database from $dbdbversion to $dbcodeversion\n";
for($ver=$dbdbversion+1;$ver<=$dbcodeversion;$ver++)
{
if(file_exists("db.update.$ver.php"))
{
include("db.update.$ver.php");
}
if(is_callable("db_update_pre")) {
echo "db.update.$ver.php::db_update_pre() exists - running...\n";
call_user_func("db_update_pre");
echo "db.update.$ver.php::db_update_pre() done.\n";
}
if(file_exists("db.update.$ver.sql"))
{
echo "db.update.$ver.sql detected - running...\n";
readfile("db.update.$ver.sql");
echo "\n";
system("mysql --default-character-set=latin1 -h$DBHOST -u$DBUSER -p$DBPASS $DBNAME <db.update.$ver.sql");
}
else
{
echo "Version $ver SQL update file not found - skipping over\n";
}
if(is_callable("db_update_post")) {
echo "db.update.$ver.php::db_update_post() exists - running...\n";
call_user_func("db_update_post");
echo "db.update.$ver.php::db_update_post() done.\n";
}
}
echo "\nAll done - updating new DB version to $dbcodeversion\n";
mysql_query("UPDATE config SET val='$dbcodeversion' WHERE var='DBVERSION' AND year='0'");
}
}
else
{
echo "ERROR: dbcodeversion and dbdbversion are not defined\n";
}
echo "</pre>\n";
?>