namespace OC\DB;
-use Doctrine\DBAL\Platforms\MySqlPlatform;
-use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
+use Doctrine\DBAL\Platforms\OraclePlatform;
use Doctrine\DBAL\Platforms\SqlitePlatform;
class MDB2SchemaManager {
return $this->executeSchemaChange($toSchema);
}
+ /**
+ * @return \OC\DB\Migrator
+ */
+ protected function getMigrator() {
+ $platform = $this->conn->getDatabasePlatform();
+ if ($platform instanceof SqlitePlatform) {
+ return new SQLiteMigrator($this->conn);
+ } else if ($platform instanceof OraclePlatform) {
+ return new OracleMigrator($this->conn);
+ } else {
+ return new Migrator($this->conn);
+ }
+ }
+
/**
* update the database scheme
* @param string $file file to read structure from
$platform = $this->conn->getDatabasePlatform();
$schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $platform);
$toSchema = $schemaReader->loadSchemaFromFile($file);
- if ($platform instanceof SqlitePlatform) {
- $check = true;
- $migrator = new SQLiteMigrator($this->conn);
- } else if ($platform instanceof MySqlPlatform or $platform instanceof PostgreSqlPlatform) {
- $check = true;
- $migrator = new Migrator($this->conn);
- } else {
- // dont do the upgrade check for oracle
- $check = false;
- $migrator = new Migrator($this->conn);
- }
+ $migrator = $this->getMigrator();
if ($generateSql) {
return $migrator->generateChangeScript($toSchema);
} else {
- if ($check) {
- $migrator->checkMigrate($toSchema);
- }
+ $migrator->checkMigrate($toSchema);
$migrator->migrate($toSchema);
return true;
}
}
$comparator = new Comparator();
- $schemaDiff = $comparator->compare($sourceSchema, $targetSchema);
-
- foreach ($schemaDiff->changedTables as $tableDiff) {
- $tableDiff->name = $this->connection->quoteIdentifier($tableDiff->name);
- foreach ($tableDiff->changedColumns as $column) {
- $column->oldColumnName = $this->connection->quoteIdentifier($column->oldColumnName);
- }
- }
-
- return $schemaDiff;
+ return $comparator->compare($sourceSchema, $targetSchema);
}
/**
--- /dev/null
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\DB;
+
+use Doctrine\DBAL\Schema\Schema;
+
+class OracleMigrator extends Migrator {
+ /**
+ * @param \Doctrine\DBAL\Schema\Schema $targetSchema
+ * @throws \OC\DB\MigrationException
+ *
+ * Migration testing is skipped for oracle
+ */
+ public function checkMigrate(Schema $targetSchema) {}
+
+ /**
+ * @param Schema $targetSchema
+ * @param \Doctrine\DBAL\Connection $connection
+ * @return \Doctrine\DBAL\Schema\SchemaDiff
+ */
+ protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) {
+ $schemaDiff = parent::getDiff($targetSchema, $connection);
+
+ // oracle forces us to quote the identifiers
+ foreach ($schemaDiff->changedTables as $tableDiff) {
+ $tableDiff->name = $this->connection->quoteIdentifier($tableDiff->name);
+ foreach ($tableDiff->changedColumns as $column) {
+ $column->oldColumnName = $this->connection->quoteIdentifier($column->oldColumnName);
+ }
+ }
+
+ return $schemaDiff;
+ }
+}