| | |
| | | exit(1); |
| | | } |
| | | |
| | | // Read DB schema version from database (if system table exists) |
| | | if (in_array('system', (array)$DB->list_tables())) { |
| | | // Read DB schema version from database (if 'system' table exists) |
| | | if (in_array($DB->table_name('system'), (array)$DB->list_tables())) { |
| | | $DB->query("SELECT " . $DB->quote_identifier('value') |
| | | ." FROM " . $DB->quote_identifier('system') |
| | | ." FROM " . $DB->quote_identifier($DB->table_name('system')) |
| | | ." WHERE " . $DB->quote_identifier('name') ." = ?", |
| | | $opts['package'] . '-version'); |
| | | |
| | | $row = $DB->fetch_array(); |
| | | $version = $row[0]; |
| | | $version = preg_replace('/[^0-9]/', '', $row[0]); |
| | | } |
| | | |
| | | // DB version not found, but release version is specified |
| | |
| | | $version = $map[$opts['version']]; |
| | | } |
| | | |
| | | // Assume last version before the system table was added |
| | | // Assume last version before the 'system' table was added |
| | | if (empty($version)) { |
| | | $version = 2012080700; |
| | | } |
| | |
| | | |
| | | $sql .= $line . "\n"; |
| | | if (preg_match('/(;|^GO)$/', trim($line))) { |
| | | @$DB->query($sql); |
| | | @$DB->query(fix_table_names($sql)); |
| | | $sql = ''; |
| | | if ($error = $DB->is_error()) { |
| | | return $error; |
| | |
| | | return; |
| | | } |
| | | |
| | | $DB->query("UPDATE " . $DB->quote_identifier('system') |
| | | $system_table = $DB->quote_identifier($DB->table_name('system')); |
| | | |
| | | $DB->query("UPDATE " . $system_table |
| | | ." SET " . $DB->quote_identifier('value') . " = ?" |
| | | ." WHERE " . $DB->quote_identifier('name') . " = ?", |
| | | $version, $package . '-version'); |
| | | |
| | | if (!$DB->is_error() && !$DB->affected_rows()) { |
| | | $DB->query("INSERT INTO " . $DB->quote_identifier('system') |
| | | $DB->query("INSERT INTO " . $system_table |
| | | ." (" . $DB->quote_identifier('name') . ", " . $DB->quote_identifier('value') . ")" |
| | | ." VALUES (?, ?)", |
| | | $package . '-version', $version); |
| | |
| | | return $DB->is_error(); |
| | | } |
| | | |
| | | function fix_table_names($sql) |
| | | { |
| | | global $DB; |
| | | |
| | | foreach (array('users','identities','contacts','contactgroups','contactgroupmembers','session','cache','cache_index','cache_index','cache_messages','dictionary','searches','system') as $table) { |
| | | $real_table = $DB->table_name($table); |
| | | if ($real_table != $table) { |
| | | $sql = preg_replace("/([^a-z0-9_])$table([^a-z0-9_])/i", "\\1$real_table\\2", $sql); |
| | | } |
| | | } |
| | | |
| | | return $sql; |
| | | } |
| | | |
| | | ?> |