2022-12-21 10:57:38 +01:00
< ? php
namespace Application\Migrations ;
2023-08-05 18:35:09 +01:00
use Doctrine\DBAL\Platforms\MySQLPlatform ;
use Doctrine\DBAL\Platforms\PostgreSQLPlatform ;
use Doctrine\DBAL\Platforms\SqlitePlatform ;
2022-12-21 10:57:38 +01:00
use Doctrine\DBAL\Schema\Schema ;
2024-02-19 01:30:12 +01:00
use Wallabag\Doctrine\WallabagMigration ;
2022-12-21 10:57:38 +01:00
/**
* Remove the deprecated ( and removed in DBAL v3 ) `json_array` type .
*/
final class Version20221221092957 extends WallabagMigration
{
public function up ( Schema $schema ) : void
{
2023-07-09 15:29:50 +02:00
$userTable = $this -> getTable ( 'user' );
2023-08-05 18:35:09 +01:00
$platform = $this -> connection -> getDatabasePlatform ();
switch ( true ) {
case $platform instanceof SqlitePlatform :
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'CREATE TEMPORARY TABLE __temp__wallabag_user AS SELECT id, username, username_canonical, email, email_canonical, enabled, password, last_login, password_requested_at, name, created_at, updated_at, authCode, emailTwoFactor, salt, confirmation_token, roles, googleAuthenticatorSecret, backupCodes FROM ' . $userTable );
$this -> addSql ( 'DROP TABLE ' . $userTable );
$this -> addSql ( 'CREATE TABLE ' . $userTable . ' ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , username VARCHAR ( 180 ) NOT NULL , username_canonical VARCHAR ( 180 ) NOT NULL , email VARCHAR ( 180 ) NOT NULL , email_canonical VARCHAR ( 180 ) NOT NULL , enabled BOOLEAN NOT NULL , salt VARCHAR ( 255 ) DEFAULT NULL , password VARCHAR ( 255 ) NOT NULL , last_login DATETIME DEFAULT NULL , confirmation_token VARCHAR ( 180 ) DEFAULT NULL , password_requested_at DATETIME DEFAULT NULL , roles CLOB NOT NULL -- ( DC2Type : array )
2022-12-21 10:57:38 +01:00
, name CLOB DEFAULT NULL , created_at DATETIME NOT NULL , updated_at DATETIME NOT NULL , authCode INTEGER DEFAULT NULL , googleAuthenticatorSecret VARCHAR ( 255 ) DEFAULT NULL , backupCodes CLOB DEFAULT NULL -- ( DC2Type : json )
, emailTwoFactor BOOLEAN NOT NULL ) ' );
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'INSERT INTO ' . $userTable . ' (id, username, username_canonical, email, email_canonical, enabled, password, last_login, password_requested_at, name, created_at, updated_at, authCode, emailTwoFactor, salt, confirmation_token, roles, googleAuthenticatorSecret, backupCodes) SELECT id, username, username_canonical, email, email_canonical, enabled, password, last_login, password_requested_at, name, created_at, updated_at, authCode, emailTwoFactor, salt, confirmation_token, roles, googleAuthenticatorSecret, backupCodes FROM __temp__wallabag_user' );
2022-12-21 10:57:38 +01:00
$this -> addSql ( 'DROP TABLE __temp__wallabag_user' );
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'CREATE UNIQUE INDEX UNIQ_1D63E7E592FC23A8 ON ' . $userTable . ' (username_canonical)' );
$this -> addSql ( 'CREATE UNIQUE INDEX UNIQ_1D63E7E5A0D96FBF ON ' . $userTable . ' (email_canonical)' );
$this -> addSql ( 'CREATE UNIQUE INDEX UNIQ_1D63E7E5C05FB297 ON ' . $userTable . ' (confirmation_token)' );
2022-12-21 10:57:38 +01:00
break ;
2023-08-05 18:35:09 +01:00
case $platform instanceof MySQLPlatform :
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'ALTER TABLE ' . $userTable . ' CHANGE backupCodes backupCodes JSON DEFAULT NULL' );
2022-12-21 10:57:38 +01:00
break ;
2023-08-05 18:35:09 +01:00
case $platform instanceof PostgreSQLPlatform :
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'ALTER TABLE ' . $userTable . ' ALTER backupcodes TYPE JSON USING backupcodes::json' );
2022-12-21 10:57:38 +01:00
break ;
}
}
public function down ( Schema $schema ) : void
{
2023-07-09 15:29:50 +02:00
$userTable = $this -> getTable ( 'user' );
2023-08-05 18:35:09 +01:00
$platform = $this -> connection -> getDatabasePlatform ();
switch ( true ) {
case $platform instanceof SqlitePlatform :
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'CREATE TEMPORARY TABLE __temp__wallabag_user AS SELECT id, username, username_canonical, email, email_canonical, enabled, salt, password, last_login, confirmation_token, password_requested_at, roles, name, created_at, updated_at, authCode, googleAuthenticatorSecret, backupCodes, emailTwoFactor FROM ' . $userTable );
$this -> addSql ( 'DROP TABLE ' . $userTable );
$this -> addSql ( 'CREATE TABLE ' . $userTable . ' ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , username VARCHAR ( 180 ) NOT NULL , username_canonical VARCHAR ( 180 ) NOT NULL , email VARCHAR ( 180 ) NOT NULL , email_canonical VARCHAR ( 180 ) NOT NULL , enabled BOOLEAN NOT NULL , salt VARCHAR ( 255 ) DEFAULT NULL , password VARCHAR ( 255 ) NOT NULL , last_login DATETIME DEFAULT NULL , confirmation_token VARCHAR ( 180 ) DEFAULT NULL , password_requested_at DATETIME DEFAULT NULL , roles CLOB NOT NULL -- ( DC2Type : array )
2022-12-21 10:57:38 +01:00
, name CLOB DEFAULT NULL , created_at DATETIME NOT NULL , updated_at DATETIME NOT NULL , authCode INTEGER DEFAULT NULL , googleAuthenticatorSecret VARCHAR ( 255 ) DEFAULT NULL , backupCodes CLOB DEFAULT NULL -- ( DC2Type : json_array )
, emailTwoFactor BOOLEAN NOT NULL ) ' );
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'INSERT INTO ' . $userTable . ' ( id , username , username_canonical , email , email_canonical , enabled , salt , password , last_login , confirmation_token , password_requested_at , roles , name , created_at , updated_at , authCode , googleAuthenticatorSecret , backupCodes , emailTwoFactor ) SELECT id , username , username_canonical , email , email_canonical , enabled , salt , password , last_login , confirmation_token , password_requested_at , roles , name , created_at , updated_at , authCode , googleAuthenticatorSecret , backupCodes , emailTwoFactor FROM __temp__wallabag_user ' );
2022-12-21 10:57:38 +01:00
$this -> addSql ( 'DROP TABLE __temp__wallabag_user' );
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'CREATE UNIQUE INDEX UNIQ_1D63E7E592FC23A8 ON ' . $userTable . ' (username_canonical)' );
$this -> addSql ( 'CREATE UNIQUE INDEX UNIQ_1D63E7E5A0D96FBF ON ' . $userTable . ' (email_canonical)' );
$this -> addSql ( 'CREATE UNIQUE INDEX UNIQ_1D63E7E5C05FB297 ON ' . $userTable . ' (confirmation_token)' );
2022-12-21 10:57:38 +01:00
break ;
2023-08-05 18:35:09 +01:00
case $platform instanceof MySQLPlatform :
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'ALTER TABLE ' . $userTable . ' CHANGE backupCodes backupCodes JSON DEFAULT NULL COMMENT \'(DC2Type:json_array)\'' );
2022-12-21 10:57:38 +01:00
break ;
2023-08-05 18:35:09 +01:00
case $platform instanceof PostgreSQLPlatform :
2023-06-21 11:34:08 +02:00
$this -> addSql ( 'ALTER TABLE ' . $userTable . ' ALTER backupCodes TYPE TEXT' );
2022-12-21 10:57:38 +01:00
break ;
}
}
}