From ad8d55c3274e81dd4fd92b41ac5d6ef5c39febf3 Mon Sep 17 00:00:00 2001
From: tbelau666 <thomas.belau@gmx.de>
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 617910b3a90..92ca9e41ebe 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 78267094d0e..d90c8525a7b 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 a2a62a81475..3c91f3c784a 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('<database/>');
 		$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 31c648a9b65..903e9b8a716 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 c3ac140594d..6d17f8f40f8 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
-- 
GitLab