Special treatment for Oracle
This commit is contained in:
parent
1ebeb6792e
commit
f7097faf82
4 changed files with 50 additions and 14 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* @param \Doctrine\DBAL\Connection $connection
|
||||
* @var ISecureRandom
|
||||
*/
|
||||
public function __construct(\Doctrine\DBAL\Connection $connection) {
|
||||
private $random;
|
||||
|
||||
/**
|
||||
* @param \Doctrine\DBAL\Connection $connection
|
||||
* @param ISecureRandom $random
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue