forked from extern/egroupware
* Guacamole/Backup/Restore: fix not working restore for Guacamole
disabling constraints and only truncate Guacamole tables, not dropping and creating them again
This commit is contained in:
parent
5cd4fc0612
commit
0685005f41
@ -67,6 +67,10 @@ class Backup
|
|||||||
* @var string|boolean
|
* @var string|boolean
|
||||||
*/
|
*/
|
||||||
var $egw_tables = false;
|
var $egw_tables = false;
|
||||||
|
/**
|
||||||
|
* Regular expression to identify a Guacamole table OR view
|
||||||
|
*/
|
||||||
|
const GUACAMOLE_REGEXP = '/^guacamole_/';
|
||||||
/**
|
/**
|
||||||
* Backup directory.
|
* Backup directory.
|
||||||
*
|
*
|
||||||
@ -360,6 +364,8 @@ class Backup
|
|||||||
if (substr($this->db->Type,0,5) == 'mysql')
|
if (substr($this->db->Type,0,5) == 'mysql')
|
||||||
{
|
{
|
||||||
$this->db->query("SET SESSION sql_mode=(SELECT REPLACE(REPLACE(@@sql_mode,'STRICT_ALL_TABLES',''),'STRICT_TRANS_TABLES',''))", __LINE__, __FILE__);
|
$this->db->query("SET SESSION sql_mode=(SELECT REPLACE(REPLACE(@@sql_mode,'STRICT_ALL_TABLES',''),'STRICT_TRANS_TABLES',''))", __LINE__, __FILE__);
|
||||||
|
// disable foreign key checks, in case Guacamole is installed
|
||||||
|
$this->db->query('SET FOREIGN_KEY_CHECKS = 0');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -371,7 +377,9 @@ class Backup
|
|||||||
foreach($this->adodb->MetaTables('TABLES') as $table)
|
foreach($this->adodb->MetaTables('TABLES') as $table)
|
||||||
{
|
{
|
||||||
if ($this->system_tables && preg_match($this->system_tables,$table) ||
|
if ($this->system_tables && preg_match($this->system_tables,$table) ||
|
||||||
$this->egw_tables && !preg_match($this->egw_tables,$table))
|
$this->egw_tables && !preg_match($this->egw_tables,$table) ||
|
||||||
|
// do NOT drop Guacamole tables and views
|
||||||
|
preg_match(self::GUACAMOLE_REGEXP, $table))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -513,7 +521,7 @@ class Backup
|
|||||||
|
|
||||||
if (substr($line,0,9) == 'version: ')
|
if (substr($line,0,9) == 'version: ')
|
||||||
{
|
{
|
||||||
// currenty not used: $api_version = trim(substr($line,9));
|
// currently not used: $api_version = trim(substr($line,9));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (substr($line,0,9) == 'charset: ')
|
if (substr($line,0,9) == 'charset: ')
|
||||||
@ -536,6 +544,12 @@ class Backup
|
|||||||
$this->schemas = json_php_unserialize(trim(substr($line,8)));
|
$this->schemas = json_php_unserialize(trim(substr($line,8)));
|
||||||
foreach($this->schemas as $table_name => $schema)
|
foreach($this->schemas as $table_name => $schema)
|
||||||
{
|
{
|
||||||
|
// do NOT create GUACAMOLE tables, just truncate them (as we have no abstraction to create the foreign keys)
|
||||||
|
if (preg_match(self::GUACAMOLE_REGEXP, $table_name))
|
||||||
|
{
|
||||||
|
$this->db->query('TRUNCATE TABLE '.$this->db->name_quote($table_name));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// if column is longtext in current schema, convert text to longtext, in case user already updated column
|
// if column is longtext in current schema, convert text to longtext, in case user already updated column
|
||||||
foreach($schema['fd'] as $col => &$def)
|
foreach($schema['fd'] as $col => &$def)
|
||||||
{
|
{
|
||||||
@ -566,7 +580,7 @@ class Backup
|
|||||||
{
|
{
|
||||||
if ($data['type'] == 'blob') $blobs[] = $col;
|
if ($data['type'] == 'blob') $blobs[] = $col;
|
||||||
}
|
}
|
||||||
// check if we have an old PostgreSQL backup useing 't'/'f' for bool values
|
// check if we have an old PostgreSQL backup using 't'/'f' for bool values
|
||||||
// --> convert them to MySQL and our new PostgreSQL format of 1/0
|
// --> convert them to MySQL and our new PostgreSQL format of 1/0
|
||||||
$bools = array();
|
$bools = array();
|
||||||
foreach($this->schemas[$table]['fd'] as $col => $def)
|
foreach($this->schemas[$table]['fd'] as $col => $def)
|
||||||
|
Loading…
Reference in New Issue
Block a user