3 namespace Application\Migrations
;
5 use Doctrine\DBAL\Migrations\AbstractMigration
;
6 use Doctrine\DBAL\Schema\Schema
;
7 use Symfony\Component\DependencyInjection\ContainerAwareInterface
;
8 use Symfony\Component\DependencyInjection\ContainerInterface
;
11 * Added pocket_consumer_key field on wallabag_config
13 class Version20161001072726
extends AbstractMigration
implements ContainerAwareInterface
16 * @var ContainerInterface
20 public function setContainer(ContainerInterface
$container = null)
22 $this->container
= $container;
25 private function getTable($tableName)
27 return $this->container
->getParameter('database_table_prefix').$tableName;
31 * @param Schema $schema
33 public function up(Schema
$schema)
35 $this->skipIf($this->connection
->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
37 // remove all FK from entry_tag
38 switch ($this->connection
->getDatabasePlatform()->getName()) {
40 $query = $this->connection
->query("
41 SELECT CONSTRAINT_NAME
42 FROM information_schema.key_column_usage
43 WHERE TABLE_NAME = '".$this->getTable('entry_tag')."' AND CONSTRAINT_NAME LIKE 'FK_%'
44 AND TABLE_SCHEMA = '".$this->connection
->getDatabase()."'"
48 foreach ($query->fetchAll() as $fk) {
49 $this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' DROP FOREIGN KEY '.$fk['CONSTRAINT_NAME']);
54 // http://dba.stackexchange.com/questions/36979/retrieving-all-pk-and-fk
55 $query = $this->connection
->query("
56 SELECT conrelid::regclass AS table_from
58 ,pg_get_constraintdef(c.oid)
60 JOIN pg_namespace n ON n.oid = c.connamespace
62 AND conrelid::regclass::text = '".$this->getTable('entry_tag')."'
63 AND n.nspname = 'public';"
67 foreach ($query->fetchAll() as $fk) {
68 $this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' DROP CONSTRAINT '.$fk['conname']);
73 $this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' ADD CONSTRAINT FK_entry_tag_entry FOREIGN KEY (entry_id) REFERENCES '.$this->getTable('entry').' (id) ON DELETE CASCADE');
74 $this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' ADD CONSTRAINT FK_entry_tag_tag FOREIGN KEY (tag_id) REFERENCES '.$this->getTable('tag').' (id) ON DELETE CASCADE');
76 // remove entry FK from annotation
78 switch ($this->connection
->getDatabasePlatform()->getName()) {
80 $query = $this->connection
->query("
81 SELECT CONSTRAINT_NAME
82 FROM information_schema.key_column_usage
83 WHERE TABLE_NAME = '".$this->getTable('annotation')."'
84 AND CONSTRAINT_NAME LIKE 'FK_%'
85 AND COLUMN_NAME = 'entry_id'
86 AND TABLE_SCHEMA = '".$this->connection
->getDatabase()."'"
90 foreach ($query->fetchAll() as $fk) {
91 $this->addSql('ALTER TABLE '.$this->getTable('annotation').' DROP FOREIGN KEY '.$fk['CONSTRAINT_NAME']);
96 // http://dba.stackexchange.com/questions/36979/retrieving-all-pk-and-fk
97 $query = $this->connection
->query("
98 SELECT conrelid::regclass AS table_from
100 ,pg_get_constraintdef(c.oid)
102 JOIN pg_namespace n ON n.oid = c.connamespace
104 AND conrelid::regclass::text = '".$this->getTable('annotation')."'
105 AND n.nspname = 'public'
106 AND pg_get_constraintdef(c.oid) LIKE '%entry_id%';"
110 foreach ($query->fetchAll() as $fk) {
111 $this->addSql('ALTER TABLE '.$this->getTable('annotation').' DROP CONSTRAINT '.$fk['conname']);
116 $this->addSql('ALTER TABLE '.$this->getTable('annotation').' ADD CONSTRAINT FK_annotation_entry FOREIGN KEY (entry_id) REFERENCES '.$this->getTable('entry').' (id) ON DELETE CASCADE');
120 * @param Schema $schema
122 public function down(Schema
$schema)
124 throw new SkipMigrationException('Too complex ...');