]> source.dussan.org Git - nextcloud-server.git/commitdiff
Use a special filter expression for Oracle to filter the prefix - fixes #13220
authorThomas Müller <thomas.mueller@tmit.eu>
Mon, 12 Jan 2015 12:57:46 +0000 (13:57 +0100)
committerThomas Müller <thomas.mueller@tmit.eu>
Mon, 12 Jan 2015 15:28:11 +0000 (16:28 +0100)
core/command/db/converttype.php
lib/private/db/connection.php
lib/private/db/mdb2schemawriter.php
lib/private/db/migrator.php
lib/private/db/oraclemigrator.php
lib/private/db/pgsqltools.php

index 8d1560b0511b3446c6fce8bce615c14f699173f4..9d03b705d12734cb413430c9a58e09cf2d2613a4 100644 (file)
@@ -228,8 +228,9 @@ class ConvertType extends Command {
        }
 
        protected function getTables(Connection $db) {
+               $filterExpression = '/^' . preg_quote($this->config->getSystemValue('dbtableprefix', 'oc_')) . '/';
                $db->getConfiguration()->
-                       setFilterSchemaAssetsExpression('/^'.$this->config->getSystemValue('dbtableprefix', 'oc_').'/');
+                       setFilterSchemaAssetsExpression($filterExpression);
                return $db->getSchemaManager()->listTableNames();
        }
 
index f2fcd8730afa0665f756abdf5291823d6a0fb534..53935c1e1ed9f9c2d7652f9098722a6d862b432c 100644 (file)
@@ -34,6 +34,13 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
                }
        }
 
+       /**
+        * @return string
+        */
+       public function getPrefix() {
+               return $this->tablePrefix;
+       }
+
        /**
         * Initializes a new instance of the Connection class.
         *
index a42cd86ba5434b2a7bcee6f9aa0ae60a2a02c577..1fb71ab398bf217f6b372f9aa9a3693182ef0c7a 100644 (file)
@@ -22,8 +22,13 @@ class OC_DB_MDB2SchemaWriter {
                $xml->addChild('overwrite', 'false');
                $xml->addChild('charset', 'utf8');
 
-               $conn->getConfiguration()->
-                       setFilterSchemaAssetsExpression('/^' . $config->getSystemValue('dbtableprefix', 'oc_') . '/');
+               // FIX ME: bloody work around
+               if ($config->getSystemValue('dbtype', 'sqlite') === 'oci') {
+                       $filterExpression = '/^"' . preg_quote($conn->getPrefix()) . '/';
+               } else {
+                       $filterExpression = '/^' . preg_quote($conn->getPrefix()) . '/';
+               }
+               $conn->getConfiguration()->setFilterSchemaAssetsExpression($filterExpression);
 
                foreach ($conn->getSchemaManager()->listTables() as $table) {
                        self::saveTable($table, $xml->addChild('table'));
index 8ccc02e36a5c19ab63ead458f6b1dfcdb531c527..fcf5aae0258085401e711bafcaf15664da50778b 100644 (file)
@@ -75,9 +75,9 @@ class Migrator {
                 * @var \Doctrine\DBAL\Schema\Table[] $tables
                 */
                $tables = $targetSchema->getTables();
-
+               $filterExpression = $this->getFilterExpression();
                $this->connection->getConfiguration()->
-                       setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
+                       setFilterSchemaAssetsExpression($filterExpression);
                $existingTables = $this->connection->getSchemaManager()->listTableNames();
 
                foreach ($tables as $table) {
@@ -161,8 +161,9 @@ class Migrator {
        }
 
        protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) {
-               $connection->getConfiguration()->
-                       setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
+               $filterExpression = $this->getFilterExpression();
+               $this->connection->getConfiguration()->
+               setFilterSchemaAssetsExpression($filterExpression);
                $sourceSchema = $connection->getSchemaManager()->createSchema();
 
                // remove tables we don't know about
@@ -230,4 +231,8 @@ class Migrator {
                $script .= PHP_EOL;
                return $script;
        }
+
+       protected function getFilterExpression() {
+               return '/^' . preg_quote($this->config->getSystemValue('dbtableprefix', 'oc_')) . '/';
+       }
 }
index b80295cbd60a41f2a2e91be73e28fb69ffe75917..9ae350238381546f84a79f945efbffcf2efa1471 100644 (file)
@@ -51,4 +51,9 @@ class OracleMigrator extends NoCheckMigrator {
                $script .= PHP_EOL;
                return $script;
        }
+
+       protected function getFilterExpression() {
+               return '/^"' . preg_quote($this->config->getSystemValue('dbtableprefix', 'oc_')) . '/';
+       }
+
 }
index f3204d4c7b656681192edcc6f9fe6a8082b8611d..9336917cc5c6f025a1efcec8e85b66e558112d14 100644 (file)
@@ -32,9 +32,9 @@ class PgSqlTools {
        * @return null
        */
        public function resynchronizeDatabaseSequences(Connection $conn) {
+               $filterExpression = '/^' . preg_quote($this->config->getSystemValue('dbtableprefix', 'oc_')) . '/';
                $databaseName = $conn->getDatabase();
-               $conn->getConfiguration()->
-                       setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
+               $conn->getConfiguration()->setFilterSchemaAssetsExpression($filterExpression);
 
                foreach ($conn->getSchemaManager()->listSequences() as $sequence) {
                        $sequenceName = $sequence->getName();