private function getTable($tableName)
{
- return $this->container->getParameter('database_table_prefix') . $tableName;
+ return $this->container->getParameter('database_table_prefix').$tableName;
+ }
+
+ private function hasColumn($tableName, $columnName)
+ {
+ switch ($this->connection->getDatabasePlatform()->getName()) {
+ case 'sqlite':
+ $rows = $this->connection->executeQuery('pragma table_info('.$tableName.')')->fetchAll();
+ foreach ($rows as $column) {
+ if (strcasecmp($column['name'], $columnName) === 0) {
+ return true;
+ }
+ }
+
+ return false;
+ case 'mysql':
+ $rows = $this->connection->executeQuery('SHOW COLUMNS FROM '.$tableName)->fetchAll();
+ foreach ($rows as $column) {
+ if (strcasecmp($column['Field'], $columnName) === 0) {
+ return true;
+ }
+ }
+
+ return false;
+ case 'postgresql':
+ $sql = sprintf("SELECT count(*)
+ FROM information_schema.columns
+ WHERE table_schema = 'public' AND table_name = '%s' AND column_name = '%s'",
+ $tableName,
+ $columnName
+ );
+ $result = $this->connection->executeQuery($sql)->fetch();
+
+ return $result['count'] > 0;
+ }
}
/**
*/
public function up(Schema $schema)
{
+ $this->skipIf($this->hasColumn($this->getTable('entry'), 'uuid'), 'It seems that you already played this migration.');
+
if ($this->connection->getDatabasePlatform()->getName() == 'postgresql') {
$this->addSql('ALTER TABLE "'.$this->getTable('entry').'" ADD uuid UUID DEFAULT NULL');
} else {
$this->addSql('ALTER TABLE "'.$this->getTable('entry').'" ADD uuid LONGTEXT DEFAULT NULL');
}
- $this->addSql("INSERT INTO \"".$this->getTable('craue_config_setting')."\" (name, value, section) VALUES ('share_public', '1', 'entry')");
+ $this->addSql('INSERT INTO "'.$this->getTable('craue_config_setting')."\" (name, value, section) VALUES ('share_public', '1', 'entry')");
}
/**
*/
public function down(Schema $schema)
{
- $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'sqlite', 'This down migration can\'t be executed on SQLite databases, because SQLite don\'t support DROP COLUMN.');
+ $this->skipIf($this->connection->getDatabasePlatform()->getName() != 'sqlite', 'This down migration can\'t be executed on SQLite databases, because SQLite don\'t support DROP COLUMN.');
$this->addSql('ALTER TABLE "'.$this->getTable('entry').'" DROP uuid');
- $this->addSql("DELETE FROM \"".$this->getTable('craue_config_setting')."\" WHERE name = 'share_public'");
+ $this->addSql('DELETE FROM "'.$this->getTable('craue_config_setting')."\" WHERE name = 'share_public'");
}
}