| | |
| | | $opts = rcube_utils::get_opt(array( |
| | | 'v' => 'version', |
| | | 'd' => 'dir', |
| | | 'l' => 'label', |
| | | 'p' => 'package', |
| | | )); |
| | | |
| | | if (empty($opts['dir'])) { |
| | | echo "ERROR: Database schema directory not specified (--dir).\n"; |
| | | exit(1); |
| | | } |
| | | if (empty($opts['label'])) { |
| | | echo "ERROR: Database schema label not specified (--label).\n"; |
| | | if (empty($opts['package'])) { |
| | | echo "ERROR: Database schema package name not specified (--package).\n"; |
| | | exit(1); |
| | | } |
| | | |
| | |
| | | $DB->query("SELECT " . $DB->quote_identifier('value') |
| | | ." FROM " . $DB->quote_identifier('system') |
| | | ." WHERE " . $DB->quote_identifier('name') ." = ?", |
| | | $opts['label'] . '-version'); |
| | | $opts['package'] . '-version'); |
| | | |
| | | $row = $DB->fetch_array(); |
| | | $version = $row[0]; |
| | |
| | | |
| | | foreach ($result as $v) { |
| | | echo "Updating database schema ($v)... "; |
| | | $error = update_db_schema($opts['label'], $v, $dir . DIRECTORY_SEPARATOR . "$v.sql"); |
| | | $error = update_db_schema($opts['package'], $v, $dir . DIRECTORY_SEPARATOR . "$v.sql"); |
| | | |
| | | if ($error) { |
| | | echo "\nError in DDL upgrade $v: $error\n"; |
| | |
| | | |
| | | exit(0); |
| | | |
| | | function update_db_schema($label, $version, $file) |
| | | function update_db_schema($package, $version, $file) |
| | | { |
| | | global $DB; |
| | | |
| | |
| | | $DB->query("UPDATE " . $DB->quote_identifier('system') |
| | | ." SET " . $DB->quote_identifier('value') . " = ?" |
| | | ." WHERE " . $DB->quote_identifier('name') . " = ?", |
| | | $version, $label . '-version'); |
| | | $version, $package . '-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 (?, ?)", |
| | | $label . '-version', $version); |
| | | $package . '-version', $version); |
| | | } |
| | | |
| | | return $DB->is_error(); |