]> source.dussan.org Git - nextcloud-server.git/commitdiff
Special treatment for Oracle
authorThomas Müller <thomas.mueller@tmit.eu>
Thu, 17 Oct 2013 18:16:27 +0000 (20:16 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Thu, 16 Oct 2014 15:02:15 +0000 (17:02 +0200)
lib/private/db/mdb2schemamanager.php
lib/private/db/migrator.php
lib/private/db/oraclemigrator.php
lib/private/db/sqlitemigrator.php

index a07c421b9b816af499c2828d0cd51e0c9402b723..ea1e512002d0c612649516e0d65cd39fc143b060 100644 (file)
@@ -58,20 +58,21 @@ class MDB2SchemaManager {
         * @return \OC\DB\Migrator
         */
        public function getMigrator() {
+               $random = \OC::$server->getSecureRandom()->getMediumStrengthGenerator();
                $platform = $this->conn->getDatabasePlatform();
                if ($platform instanceof SqlitePlatform) {
                        $config = \OC::$server->getConfig();
-                       return new SQLiteMigrator($this->conn, $config);
+                       return new SQLiteMigrator($this->conn, $random, $config);
                } else if ($platform instanceof OraclePlatform) {
-                       return new OracleMigrator($this->conn);
+                       return new OracleMigrator($this->conn, $random);
                } else if ($platform instanceof MySqlPlatform) {
-                       return new MySQLMigrator($this->conn);
+                       return new MySQLMigrator($this->conn, $random);
                } else if ($platform instanceof SQLServerPlatform) {
-                       return new MsSqlMigrator($this->conn);
+                       return new MsSqlMigrator($this->conn, $random);
                } else if ($platform instanceof PostgreSqlPlatform) {
-                       return new Migrator($this->conn);
+                       return new Migrator($this->conn, $random);
                } else {
-                       return new NoCheckMigrator($this->conn);
+                       return new NoCheckMigrator($this->conn, $random);
                }
        }
 
index d05f8455551faead79c2189e03c33aa7550fd4a7..31c648a9b65af831aff7656593d08055cff91611 100644 (file)
@@ -14,18 +14,27 @@ use \Doctrine\DBAL\Schema\Table;
 use \Doctrine\DBAL\Schema\Schema;
 use \Doctrine\DBAL\Schema\SchemaConfig;
 use \Doctrine\DBAL\Schema\Comparator;
+use OCP\Security\ISecureRandom;
 
 class Migrator {
+
        /**
         * @var \Doctrine\DBAL\Connection $connection
         */
        protected $connection;
 
+       /**
+        * @var ISecureRandom
+        */
+       private $random;
+
        /**
         * @param \Doctrine\DBAL\Connection $connection
+        * @param ISecureRandom $random
         */
-       public function __construct(\Doctrine\DBAL\Connection $connection) {
+       public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random) {
                $this->connection = $connection;
+               $this->random = $random;
        }
 
        /**
@@ -45,8 +54,7 @@ class Migrator {
                $script = '';
                $sqls = $schemaDiff->toSql($this->connection->getDatabasePlatform());
                foreach ($sqls as $sql) {
-                       $script .= $sql . ';';
-                       $script .= PHP_EOL;
+                       $script .= $this->convertStatementToScript($sql);
                }
 
                return $script;
@@ -84,7 +92,7 @@ class Migrator {
         * @return string
         */
        protected function generateTemporaryTableName($name) {
-               return 'oc_' . $name . '_' . \OCP\Util::generateRandomBytes(13);
+               return 'oc_' . $name . '_' . $this->random->generate(13, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS);
        }
 
        /**
@@ -135,7 +143,7 @@ class Migrator {
                                $indexName = $index->getName();
                        } else {
                                // avoid conflicts in index names
-                               $indexName = 'oc_' . \OCP\Util::generateRandomBytes(13);
+                               $indexName = 'oc_' . $this->random->generate(13, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS);
                        }
                        $newIndexes[] = new Index($indexName, $index->getColumns(), $index->isUnique(), $index->isPrimary());
                }
@@ -201,4 +209,15 @@ class Migrator {
        protected function dropTable($name) {
                $this->connection->exec('DROP TABLE ' . $this->connection->quoteIdentifier($name));
        }
+
+       /**
+        * @param $statement
+        * @return string
+        */
+       protected function convertStatementToScript($statement) {
+               $script = $statement . ';';
+               $script .= PHP_EOL;
+               $script .= PHP_EOL;
+               return $script;
+       }
 }
index 1a8df2def9c9de165c3e7c7d90764c6515a59fb7..b80295cbd60a41f2a2e91be73e28fb69ffe75917 100644 (file)
@@ -37,4 +37,18 @@ class OracleMigrator extends NoCheckMigrator {
        protected function generateTemporaryTableName($name) {
                return 'oc_' . uniqid();
        }
+
+       /**
+        * @param $statement
+        * @return string
+        */
+       protected function convertStatementToScript($statement) {
+               if (substr($statement, -1) === ';') {
+                       return $statement . PHP_EOL . '/' . PHP_EOL;
+               }
+               $script = $statement . ';';
+               $script .= PHP_EOL;
+               $script .= PHP_EOL;
+               return $script;
+       }
 }
index 18e9d19d5eeb99bf6ce1ef7c75e533ef25a50494..848e4986571f25f56224bdf9c686982874fbfe72 100644 (file)
@@ -10,6 +10,7 @@ namespace OC\DB;
 
 use Doctrine\DBAL\DBALException;
 use Doctrine\DBAL\Schema\Schema;
+use OCP\Security\ISecureRandom;
 
 class SQLiteMigrator extends Migrator {
 
@@ -20,10 +21,11 @@ class SQLiteMigrator extends Migrator {
 
        /**
         * @param \Doctrine\DBAL\Connection $connection
+        * @param ISecureRandom $random
         * @param \OCP\IConfig $config
         */
-       public function __construct(\Doctrine\DBAL\Connection $connection, \OCP\IConfig $config) {
-               parent::__construct($connection);
+       public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random, \OCP\IConfig $config) {
+               parent::__construct($connection, $random);
                $this->config = $config;
        }