diff --git a/core/command/db/converttype.php b/core/command/db/converttype.php index 617910b3a9..8d1560b051 100644 --- a/core/command/db/converttype.php +++ b/core/command/db/converttype.php @@ -228,6 +228,8 @@ class ConvertType extends Command { } protected function getTables(Connection $db) { + $db->getConfiguration()-> + setFilterSchemaAssetsExpression('/^'.$this->config->getSystemValue('dbtableprefix', 'oc_').'/'); return $db->getSchemaManager()->listTableNames(); } @@ -264,7 +266,7 @@ class ConvertType extends Command { $this->copyTable($fromDB, $toDB, $table, $input, $output); } if ($input->getArgument('type') === 'pgsql') { - $tools = new \OC\DB\PgSqlTools; + $tools = new \OC\DB\PgSqlTools($this->config); $tools->resynchronizeDatabaseSequences($toDB); } // save new database config diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php index 78267094d0..358360d0b4 100644 --- a/lib/private/db/mdb2schemamanager.php +++ b/lib/private/db/mdb2schemamanager.php @@ -36,9 +36,7 @@ class MDB2SchemaManager { * TODO: write more documentation */ public function getDbStructure($file, $mode = MDB2_SCHEMA_DUMP_STRUCTURE) { - $sm = $this->conn->getSchemaManager(); - - return \OC_DB_MDB2SchemaWriter::saveSchemaToFile($file, $sm); + return \OC_DB_MDB2SchemaWriter::saveSchemaToFile($file, $this->conn); } /** @@ -60,19 +58,19 @@ class MDB2SchemaManager { public function getMigrator() { $random = \OC::$server->getSecureRandom()->getMediumStrengthGenerator(); $platform = $this->conn->getDatabasePlatform(); + $config = \OC::$server->getConfig(); if ($platform instanceof SqlitePlatform) { - $config = \OC::$server->getConfig(); return new SQLiteMigrator($this->conn, $random, $config); } else if ($platform instanceof OraclePlatform) { - return new OracleMigrator($this->conn, $random); + return new OracleMigrator($this->conn, $random, $config); } else if ($platform instanceof MySqlPlatform) { - return new MySQLMigrator($this->conn, $random); + return new MySQLMigrator($this->conn, $random, $config); } else if ($platform instanceof SQLServerPlatform) { - return new MsSqlMigrator($this->conn, $random); + return new MsSqlMigrator($this->conn, $random, $config); } else if ($platform instanceof PostgreSqlPlatform) { - return new Migrator($this->conn, $random); + return new Migrator($this->conn, $random, $config); } else { - return new NoCheckMigrator($this->conn, $random); + return new NoCheckMigrator($this->conn, $random, $config); } } diff --git a/lib/private/db/mdb2schemawriter.php b/lib/private/db/mdb2schemawriter.php index a2a62a8147..a42cd86ba5 100644 --- a/lib/private/db/mdb2schemawriter.php +++ b/lib/private/db/mdb2schemawriter.php @@ -10,16 +10,22 @@ class OC_DB_MDB2SchemaWriter { /** * @param string $file - * @param \Doctrine\DBAL\Schema\AbstractSchemaManager $sm + * @param \OC\DB\Connection $conn * @return bool */ - static public function saveSchemaToFile($file, $sm) { + static public function saveSchemaToFile($file, \OC\DB\Connection $conn) { + $config = \OC::$server->getConfig(); + $xml = new SimpleXMLElement(''); - $xml->addChild('name', OC_Config::getValue( "dbname", "owncloud" )); + $xml->addChild('name', $config->getSystemValue('dbname', 'owncloud')); $xml->addChild('create', 'true'); $xml->addChild('overwrite', 'false'); $xml->addChild('charset', 'utf8'); - foreach ($sm->listTables() as $table) { + + $conn->getConfiguration()-> + setFilterSchemaAssetsExpression('/^' . $config->getSystemValue('dbtableprefix', 'oc_') . '/'); + + foreach ($conn->getSchemaManager()->listTables() as $table) { self::saveTable($table, $xml->addChild('table')); } file_put_contents($file, $xml->asXML()); diff --git a/lib/private/db/migrator.php b/lib/private/db/migrator.php index 31c648a9b6..8ccc02e36a 100644 --- a/lib/private/db/migrator.php +++ b/lib/private/db/migrator.php @@ -14,6 +14,7 @@ use \Doctrine\DBAL\Schema\Table; use \Doctrine\DBAL\Schema\Schema; use \Doctrine\DBAL\Schema\SchemaConfig; use \Doctrine\DBAL\Schema\Comparator; +use OCP\IConfig; use OCP\Security\ISecureRandom; class Migrator { @@ -28,13 +29,18 @@ class Migrator { */ private $random; + /** @var IConfig */ + protected $config; + /** * @param \Doctrine\DBAL\Connection $connection * @param ISecureRandom $random + * @param IConfig $config */ - public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random) { + public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random, IConfig $config) { $this->connection = $connection; $this->random = $random; + $this->config = $config; } /** @@ -70,6 +76,8 @@ class Migrator { */ $tables = $targetSchema->getTables(); + $this->connection->getConfiguration()-> + setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/'); $existingTables = $this->connection->getSchemaManager()->listTableNames(); foreach ($tables as $table) { @@ -153,6 +161,8 @@ class Migrator { } protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) { + $connection->getConfiguration()-> + setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/'); $sourceSchema = $connection->getSchemaManager()->createSchema(); // remove tables we don't know about diff --git a/lib/private/db/pgsqltools.php b/lib/private/db/pgsqltools.php index c3ac140594..f3204d4c7b 100644 --- a/lib/private/db/pgsqltools.php +++ b/lib/private/db/pgsqltools.php @@ -8,11 +8,23 @@ */ namespace OC\DB; +use OCP\IConfig; /** * Various PostgreSQL specific helper functions. */ class PgSqlTools { + + /** @var \OCP\IConfig */ + private $config; + + /** + * @param \OCP\IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + /** * @brief Resynchronizes all sequences of a database after using INSERTs * without leaving out the auto-incremented column. @@ -21,6 +33,9 @@ class PgSqlTools { */ public function resynchronizeDatabaseSequences(Connection $conn) { $databaseName = $conn->getDatabase(); + $conn->getConfiguration()-> + setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/'); + foreach ($conn->getSchemaManager()->listSequences() as $sequence) { $sequenceName = $sequence->getName(); $sqlInfo = 'SELECT table_schema, table_name, column_name diff --git a/lib/private/db/sqlitemigrator.php b/lib/private/db/sqlitemigrator.php index 848e498657..42b6563464 100644 --- a/lib/private/db/sqlitemigrator.php +++ b/lib/private/db/sqlitemigrator.php @@ -10,25 +10,9 @@ namespace OC\DB; use Doctrine\DBAL\DBALException; use Doctrine\DBAL\Schema\Schema; -use OCP\Security\ISecureRandom; class SQLiteMigrator extends Migrator { - /** - * @var \OCP\IConfig - */ - private $config; - - /** - * @param \Doctrine\DBAL\Connection $connection - * @param ISecureRandom $random - * @param \OCP\IConfig $config - */ - public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random, \OCP\IConfig $config) { - parent::__construct($connection, $random); - $this->config = $config; - } - /** * @param \Doctrine\DBAL\Schema\Schema $targetSchema * @throws \OC\DB\MigrationException diff --git a/tests/lib/db/migrator.php b/tests/lib/db/migrator.php index 1a1d530f1d..5426774048 100644 --- a/tests/lib/db/migrator.php +++ b/tests/lib/db/migrator.php @@ -39,7 +39,7 @@ class Migrator extends \Test\TestCase { $this->markTestSkipped('DB migration tests are not supported on MSSQL'); } $this->manager = new \OC\DB\MDB2SchemaManager($this->connection); - $this->tableName = strtolower($this->getUniqueID('test_')); + $this->tableName = strtolower($this->getUniqueID('oc_test_')); } protected function tearDown() {