2016-05-21 16:09:38 +00:00
< ? php
namespace Application\Migrations ;
use Doctrine\DBAL\Migrations\AbstractMigration ;
use Doctrine\DBAL\Schema\Schema ;
2016-08-24 19:38:26 +00:00
use Symfony\Component\DependencyInjection\ContainerAwareInterface ;
use Symfony\Component\DependencyInjection\ContainerInterface ;
2016-05-21 16:09:38 +00:00
2017-01-13 13:51:37 +00:00
/**
2017-04-13 10:57:31 +00:00
* Added name field on wallabag_oauth2_clients .
2017-01-13 13:51:37 +00:00
*/
2016-08-24 19:38:26 +00:00
class Version20160812120952 extends AbstractMigration implements ContainerAwareInterface
2016-05-21 16:09:38 +00:00
{
2016-08-24 19:38:26 +00:00
/**
* @ var ContainerInterface
*/
private $container ;
public function setContainer ( ContainerInterface $container = null )
{
$this -> container = $container ;
}
2016-05-21 16:09:38 +00:00
/**
* @ param Schema $schema
*/
public function up ( Schema $schema )
{
2016-11-26 15:06:14 +00:00
$clientsTable = $schema -> getTable ( $this -> getTable ( 'oauth2_clients' ));
$this -> skipIf ( $clientsTable -> hasColumn ( 'name' ), 'It seems that you already played this migration.' );
2016-11-25 16:43:28 +00:00
2017-11-04 20:23:18 +00:00
if ( 'sqlite' === $this -> connection -> getDatabasePlatform () -> getName ()) {
// Can't use $clientsTable->addColumn('name', 'blob');
// because of the error:
// SQLSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL
$databaseTablePrefix = $this -> container -> getParameter ( 'database_table_prefix' );
$this -> addSql ( 'CREATE TEMPORARY TABLE __temp__' . $databaseTablePrefix . 'oauth2_clients AS SELECT id, random_id, redirect_uris, secret, allowed_grant_types FROM ' . $databaseTablePrefix . 'oauth2_clients' );
$this -> addSql ( 'DROP TABLE ' . $databaseTablePrefix . 'oauth2_clients' );
$this -> addSql ( 'CREATE TABLE ' . $databaseTablePrefix . 'oauth2_clients (id INTEGER NOT NULL, user_id INTEGER DEFAULT NULL, random_id VARCHAR(255) NOT NULL COLLATE BINARY, secret VARCHAR(255) NOT NULL COLLATE BINARY, redirect_uris CLOB NOT NULL, allowed_grant_types CLOB NOT NULL, name CLOB NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_635D765EA76ED395 FOREIGN KEY (user_id) REFERENCES "' . $databaseTablePrefix . 'user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE)' );
$this -> addSql ( 'INSERT INTO ' . $databaseTablePrefix . 'oauth2_clients (id, random_id, redirect_uris, secret, allowed_grant_types) SELECT id, random_id, redirect_uris, secret, allowed_grant_types FROM __temp__' . $databaseTablePrefix . 'oauth2_clients' );
$this -> addSql ( 'DROP TABLE __temp__' . $databaseTablePrefix . 'oauth2_clients' );
$this -> addSql ( 'CREATE INDEX IDX_635D765EA76ED395 ON ' . $databaseTablePrefix . 'oauth2_clients (user_id)' );
} else {
$clientsTable -> addColumn ( 'name' , 'blob' );
}
2016-05-21 16:09:38 +00:00
}
/**
* @ param Schema $schema
*/
public function down ( Schema $schema )
{
2016-11-26 15:06:14 +00:00
$clientsTable = $schema -> getTable ( $this -> getTable ( 'oauth2_clients' ));
2017-11-04 20:23:18 +00:00
if ( 'sqlite' === $this -> connection -> getDatabasePlatform () -> getName ()) {
$databaseTablePrefix = $this -> container -> getParameter ( 'database_table_prefix' );
$this -> addSql ( 'DROP INDEX IDX_635D765EA76ED395' );
$this -> addSql ( 'CREATE TEMPORARY TABLE __temp__' . $databaseTablePrefix . 'oauth2_clients AS SELECT id, random_id, redirect_uris, secret, allowed_grant_types FROM ' . $databaseTablePrefix . 'oauth2_clients' );
$this -> addSql ( 'DROP TABLE ' . $databaseTablePrefix . 'oauth2_clients' );
$this -> addSql ( 'CREATE TABLE ' . $databaseTablePrefix . 'oauth2_clients (id INTEGER NOT NULL, random_id VARCHAR(255) NOT NULL, secret VARCHAR(255) NOT NULL, redirect_uris CLOB NOT NULL COLLATE BINARY, allowed_grant_types CLOB NOT NULL COLLATE BINARY, PRIMARY KEY(id))' );
$this -> addSql ( 'INSERT INTO ' . $databaseTablePrefix . 'oauth2_clients (id, random_id, redirect_uris, secret, allowed_grant_types) SELECT id, random_id, redirect_uris, secret, allowed_grant_types FROM __temp__' . $databaseTablePrefix . 'oauth2_clients' );
$this -> addSql ( 'DROP TABLE __temp__' . $databaseTablePrefix . 'oauth2_clients' );
} else {
$clientsTable -> dropColumn ( 'name' );
}
2016-05-21 16:09:38 +00:00
}
2017-07-01 07:52:38 +00:00
private function getTable ( $tableName )
{
return $this -> container -> getParameter ( 'database_table_prefix' ) . $tableName ;
}
2016-05-21 16:09:38 +00:00
}