From 7e7431bddadae7802748979864ffafa73f694ede Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 9 Jan 2013 19:21:58 +0100 Subject: Use updatedb.sh from update.sh + various fixes in updatedb.sh --- bin/update.sh | 36 ++++++++---------------------------- bin/updatedb.sh | 50 ++++++++++++++++++++++++-------------------------- 2 files changed, 32 insertions(+), 54 deletions(-) (limited to 'bin') diff --git a/bin/update.sh b/bin/update.sh index 2015aa904..e1beef053 100755 --- a/bin/update.sh +++ b/bin/update.sh @@ -124,7 +124,7 @@ if ($RCI->configured) { } } else { - echo "Please update your config files manually according to the above messages.\n\n"; + echo "Please update your config files manually according to the above messages.\n"; } } @@ -143,36 +143,18 @@ if ($RCI->configured) { // check database schema if ($RCI->config['db_dsnw']) { - $DB = rcube_db::factory($RCI->config['db_dsnw'], '', false); - $DB->db_connect('w'); - if ($db_error_msg = $DB->is_error()) { - echo "Error connecting to database: $db_error_msg\n"; - $success = false; - } - else if ($err = $RCI->db_schema_check($DB, false)) { - $updatefile = INSTALL_PATH . 'SQL/' . (isset($RCI->db_map[$DB->db_provider]) ? $RCI->db_map[$DB->db_provider] : $DB->db_provider) . '.update.sql'; - echo "WARNING: Database schema needs to be updated!\n"; - echo join("\n", $err) . "\n\n"; - $success = false; - - if ($opts['version']) { - echo "Do you want to run the update queries to get the schmea fixed? (y/N)\n"; - $input = trim(fgets(STDIN)); - if (strtolower($input) == 'y') { - $success = $RCI->update_db($DB, $opts['version']); - } - } - - if (!$success) - echo "Open $updatefile and execute all queries below the comment with the currently installed version number.\n"; - } + echo "Executing database schema update.\n"; + system(INSTALL_PATH . "bin/updatedb.sh --label=roundcube --version=" . $ops['version'] + . " --dir=" . INSTALL_PATH . DIRECTORY_SEPARATOR . "SQL", $res); + + $success = !$res; } - + // index contacts for fulltext searching if (version_compare(version_parse($opts['version']), '0.6.0', '<')) { system(INSTALL_PATH . 'bin/indexcontacts.sh'); } - + if ($success) { echo "This instance of Roundcube is up-to-date.\n"; echo "Have fun!\n"; @@ -183,6 +165,4 @@ else { echo "Open http://url-to-roundcube/installer/ in your browser and follow the instuctions.\n"; } -echo "\n"; - ?> diff --git a/bin/updatedb.sh b/bin/updatedb.sh index d2cf1b046..3d37edf61 100755 --- a/bin/updatedb.sh +++ b/bin/updatedb.sh @@ -45,8 +45,27 @@ if (!file_exists($opts['dir'])) { exit(1); } -// version is specified, use release-to-version map -if ($opts['version']) { +$RC = rcube::get_instance(); +$DB = rcube_db::factory($RC->config->get('db_dsnw')); + +// Connect to database +$DB->db_connect('w'); +if (!$DB->is_connected()) { + echo "Error connecting to database: " . $DB->is_error() . ".\n"; + exit(1); +} + +// Read DB schema version from database +$DB->query("SELECT " . $DB->quote_identifier('value') + ." FROM " . $DB->quote_identifier('system') + ." WHERE " . $DB->quote_identifier('name') ." = ?", + $opts['label'] . '-version'); + +$row = $DB->fetch_array(); +$version = $row[0]; + +// no DB version, but release version is specified +if (!$version && $opts['version']) { // Map old release version string to DB schema version // Note: This is for backward compat. only, do not need to be updated $map = array( @@ -82,28 +101,7 @@ if ($opts['version']) { $version = $map[$opts['version']]; } -$RC = rcube::get_instance(); -$DB = rcube_db::factory($RC->config->get('db_dsnw')); - -// Connect to database -$DB->db_connect('w'); -if (!$DB->is_connected()) { - echo "Error connecting to database: " . $DB->is_error() . ".\n"; - exit(1); -} - -// Read DB schema version from database -if (empty($version)) { - @$DB->query("SELECT " . $DB->quote_identifier('value') - ." FROM " . $DB->quote_identifier('system') - ." WHERE name = ?", - $opts['label'] . '-version'); - - $row = $DB->fetch_array(); - $version = $row[0]; -} - -// Assume last version without the "system" table +// Assume last version before the system table was added if (empty($version)) { $version = 2012080700; } @@ -162,13 +160,13 @@ function update_db_schema($label, $version, $file) $DB->query("UPDATE " . $DB->quote_identifier('system') ." SET " . $DB->quote_identifier('value') . " = ?" ." WHERE " . $DB->quote_identifier('name') . " = ?", - $version, $opts['label'] . '-version'); + $version, $label . '-version'); if (!$DB->is_error() && !$DB->affected_rows()) { $DB->query("INSERT INTO " . $DB->quote_identifier('system') ." (" . $DB->quote_identifier('name') . ", " . $DB->quote_identifier('value') . ")" ." VALUES (?, ?)", - $opts['label'] . '-version', $version); + $label . '-version', $version); } return $DB->is_error(); -- cgit v1.2.3