Fix migrator for postgres

This commit is contained in:
Robin Appelman 2014-03-14 16:28:56 +01:00
parent 5243562f45
commit 35550e8d9a
2 changed files with 6 additions and 8 deletions

View File

@ -81,6 +81,8 @@ class Migrator {
$this->applySchema($schema);
$this->dropTable($tmpName);
} catch (DBALException $e) {
// pgsql needs to commit it's failed transaction before doing anything else
$this->connection->commit();
$this->dropTable($tmpName);
throw new MigrationException($table->getName(), $e->getMessage());
}
@ -153,7 +155,7 @@ class Migrator {
$quotedSource = $this->connection->quoteIdentifier($sourceName);
$quotedTarget = $this->connection->quoteIdentifier($targetName);
$this->connection->exec('CREATE TABLE ' . $quotedTarget . ' LIKE ' . $quotedSource);
$this->connection->exec('CREATE TABLE ' . $quotedTarget . ' (LIKE ' . $quotedSource . ')');
$this->connection->exec('INSERT INTO ' . $quotedTarget . ' SELECT * FROM ' . $quotedSource);
}

View File

@ -20,25 +20,21 @@ class Migrator extends \PHPUnit_Framework_TestCase {
private $tableName;
private $fullTableName;
public function setUp() {
$this->tableName = 'test_' . uniqid();
$this->connection = \OC_DB::getConnection();
if ($this->connection->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) {
$this->markTestSkipped('Migration tests dont function on sqlite since sqlite doesnt give an error on existing duplicate data');
} else {
$this->fullTableName = $this->connection->getDatabase() . '.' . $this->tableName;
}
}
public function tearDown() {
$this->connection->exec('DROP TABLE ' . $this->fullTableName);
$this->connection->exec('DROP TABLE ' . $this->tableName);
}
private function getInitialSchema() {
$schema = new Schema(array(), array(), $this->getSchemaConfig());
$table = $schema->createTable($this->fullTableName);
$table = $schema->createTable($this->tableName);
$table->addColumn('id', 'integer');
$table->addColumn('name', 'string');
$table->addIndex(array('id'), $this->tableName . '_id');
@ -47,7 +43,7 @@ class Migrator extends \PHPUnit_Framework_TestCase {
private function getNewSchema() {
$schema = new Schema(array(), array(), $this->getSchemaConfig());
$table = $schema->createTable($this->fullTableName);
$table = $schema->createTable($this->tableName);
$table->addColumn('id', 'integer');
$table->addColumn('name', 'string');
$table->addUniqueIndex(array('id'), $this->tableName . '_id');