From ad8d55c3274e81dd4fd92b41ac5d6ef5c39febf3 Mon Sep 17 00:00:00 2001 From: tbelau666 Date: Sun, 30 Nov 2014 23:17:09 +0100 Subject: [PATCH] Use Doctrines filter by table name Doctrine's SchemaManager can filter table names by regular expression. On this way it picks up only ownClouds's tables in a database. by tbelau666 --- core/command/db/converttype.php | 2 ++ lib/private/db/mdb2schemamanager.php | 4 +--- lib/private/db/mdb2schemawriter.php | 8 ++++++-- lib/private/db/migrator.php | 6 +++++- lib/private/db/pgsqltools.php | 3 +++ 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/core/command/db/converttype.php b/core/command/db/converttype.php index 617910b3a9..92ca9e41eb 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').'/'); return $db->getSchemaManager()->listTableNames(); } diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php index 78267094d0..d90c8525a7 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); } /** diff --git a/lib/private/db/mdb2schemawriter.php b/lib/private/db/mdb2schemawriter.php index a2a62a8147..3c91f3c784 100644 --- a/lib/private/db/mdb2schemawriter.php +++ b/lib/private/db/mdb2schemawriter.php @@ -13,13 +13,17 @@ class OC_DB_MDB2SchemaWriter { * @param \Doctrine\DBAL\Schema\AbstractSchemaManager $sm * @return bool */ - static public function saveSchemaToFile($file, $sm) { + static public function saveSchemaToFile($file, $conn) { $xml = new SimpleXMLElement(''); $xml->addChild('name', OC_Config::getValue( "dbname", "owncloud" )); $xml->addChild('create', 'true'); $xml->addChild('overwrite', 'false'); $xml->addChild('charset', 'utf8'); - foreach ($sm->listTables() as $table) { + + $conn->getConfiguration()-> + setFilterSchemaAssetsExpression('/^'.\OCP\Config::getSystemValue('dbtableprefix'.'/')); + + 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..903e9b8a71 100644 --- a/lib/private/db/migrator.php +++ b/lib/private/db/migrator.php @@ -69,7 +69,9 @@ class Migrator { * @var \Doctrine\DBAL\Schema\Table[] $tables */ $tables = $targetSchema->getTables(); - + + $this->connection->getConfiguration()-> + setFilterSchemaAssetsExpression('/^'.\OCP\Config::getSystemValue('dbtableprefix').'/'); $existingTables = $this->connection->getSchemaManager()->listTableNames(); foreach ($tables as $table) { @@ -153,6 +155,8 @@ class Migrator { } protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) { + $connection->getConfiguration()-> + setFilterSchemaAssetsExpression('/^'.\OCP\Config::getSystemValue('dbtableprefix').'/'); $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..6d17f8f40f 100644 --- a/lib/private/db/pgsqltools.php +++ b/lib/private/db/pgsqltools.php @@ -21,6 +21,9 @@ class PgSqlTools { */ public function resynchronizeDatabaseSequences(Connection $conn) { $databaseName = $conn->getDatabase(); + $conn->getConfiguration()-> + setFilterSchemaAssetsExpression('/^'.\OCP\Config::getSystemValue('dbtableprefix').'/'); + foreach ($conn->getSchemaManager()->listSequences() as $sequence) { $sequenceName = $sequence->getName(); $sqlInfo = 'SELECT table_schema, table_name, column_name