Only quote identifiers for oracle during migration

This commit is contained in:
Robin Appelman 2014-04-11 15:10:09 +02:00
parent 4d7045e701
commit a59f6818eb
3 changed files with 58 additions and 26 deletions

View file

@ -8,8 +8,7 @@
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 {
@ -54,6 +53,20 @@ 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
@ -65,24 +78,12 @@ class MDB2SchemaManager {
$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;
}

View file

@ -144,16 +144,7 @@ class Migrator {
}
$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);
}
/**

View file

@ -0,0 +1,40 @@
<?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;
}
}