diff --git a/composer.json b/composer.json index 9caff30..0db53f0 100644 --- a/composer.json +++ b/composer.json @@ -24,6 +24,7 @@ "php": " >=8.3", "ibexa/content-forms": "~5.0.x-dev", "ibexa/core": "~5.0.x-dev", + "ibexa/doctrine-migrations": "dev-feat/doctrine-migrations-5.0", "ibexa/notifications": "~5.0.x-dev", "jms/translation-bundle": "^2.4", "symfony/config": "^7.4", diff --git a/src/bundle/Migration/InstallSchemaMigration.php b/src/bundle/Migration/InstallSchemaMigration.php index 41bf034..fcae31e 100644 --- a/src/bundle/Migration/InstallSchemaMigration.php +++ b/src/bundle/Migration/InstallSchemaMigration.php @@ -35,7 +35,7 @@ public function up(Schema $schema): void { $this->abortIfUnsupportedPlatform(SqlPlatform::MYSQL, SqlPlatform::POSTGRESQL, SqlPlatform::SQLITE); - if ($schema->hasTable('ibexa_user_invitations')) { + if ($schema->hasTable('ibexa_user_invitation')) { return; } diff --git a/src/bundle/Migration/RenameSchemaTo5_0Migration.php b/src/bundle/Migration/RenameSchemaTo5_0Migration.php new file mode 100644 index 0000000..dcd7e6c --- /dev/null +++ b/src/bundle/Migration/RenameSchemaTo5_0Migration.php @@ -0,0 +1,50 @@ +abortIfUnsupportedPlatform(SqlPlatform::MYSQL, SqlPlatform::POSTGRESQL, SqlPlatform::SQLITE); + + if ($schema->hasTable('ibexa_user_invitation')) { + return; + } + + if ($this->isMySQL()) { + $this->addSqlFile(__DIR__ . '/sql/rename-schema-to-5-0-mysql.sql'); + } elseif ($this->isPostgreSQL()) { + $this->addSqlFile(__DIR__ . '/sql/rename-schema-to-5-0-postgresql.sql'); + } elseif ($this->isSqlite()) { + $this->addSqlFile(__DIR__ . '/sql/rename-schema-to-5-0-sqlite.sql'); + } + } +} diff --git a/src/bundle/Migration/sql/rename-schema-to-5-0-mysql.sql b/src/bundle/Migration/sql/rename-schema-to-5-0-mysql.sql new file mode 100644 index 0000000..401363c --- /dev/null +++ b/src/bundle/Migration/sql/rename-schema-to-5-0-mysql.sql @@ -0,0 +1,17 @@ +ALTER TABLE ibexa_user_invitations RENAME TO ibexa_user_invitation; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation RENAME INDEX ibexa_user_invitations_email_idx TO ibexa_user_invitation_email_idx; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation RENAME INDEX ibexa_user_invitations_hash_idx TO ibexa_user_invitation_hash_idx; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation RENAME INDEX ibexa_user_invitations_email_uindex TO ibexa_user_invitation_email_uindex; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation RENAME INDEX ibexa_user_invitations_hash_uindex TO ibexa_user_invitation_hash_uindex; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitations_assignments RENAME TO ibexa_user_invitation_assignment; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation_assignment DROP FOREIGN KEY ibexa_user_invitations_assignments_ibexa_user_invitations_id_fk; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation_assignment ADD CONSTRAINT ibexa_user_invitation_assignment_ibexa_user_invitation_id_fk FOREIGN KEY (invitation_id) REFERENCES ibexa_user_invitation(id) ON DELETE CASCADE ON UPDATE CASCADE; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation_assignment RENAME INDEX IDX_DA5A7872A35D7AF0 TO IDX_9E1E6F70A35D7AF0; diff --git a/src/bundle/Migration/sql/rename-schema-to-5-0-postgresql.sql b/src/bundle/Migration/sql/rename-schema-to-5-0-postgresql.sql new file mode 100644 index 0000000..b35c403 --- /dev/null +++ b/src/bundle/Migration/sql/rename-schema-to-5-0-postgresql.sql @@ -0,0 +1,21 @@ +ALTER TABLE ibexa_user_invitations RENAME TO ibexa_user_invitation; +-- ibexa:sql-statement-separator +ALTER SEQUENCE ibexa_user_invitations_id_seq RENAME TO ibexa_user_invitation_id_seq; +-- ibexa:sql-statement-separator +ALTER INDEX ibexa_user_invitations_email_idx RENAME TO ibexa_user_invitation_email_idx; +-- ibexa:sql-statement-separator +ALTER INDEX ibexa_user_invitations_hash_idx RENAME TO ibexa_user_invitation_hash_idx; +-- ibexa:sql-statement-separator +ALTER INDEX ibexa_user_invitations_email_uindex RENAME TO ibexa_user_invitation_email_uindex; +-- ibexa:sql-statement-separator +ALTER INDEX ibexa_user_invitations_hash_uindex RENAME TO ibexa_user_invitation_hash_uindex; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitations_assignments RENAME TO ibexa_user_invitation_assignment; +-- ibexa:sql-statement-separator +ALTER SEQUENCE ibexa_user_invitations_assignments_id_seq RENAME TO ibexa_user_invitation_assignment_id_seq; +-- ibexa:sql-statement-separator +ALTER INDEX IDX_DA5A7872A35D7AF0 RENAME TO IDX_9E1E6F70A35D7AF0; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation_assignment DROP CONSTRAINT ibexa_user_invitations_assignments_ibexa_user_invitations_id_fk; +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitation_assignment ADD CONSTRAINT ibexa_user_invitation_assignment_ibexa_user_invitation_id_fk FOREIGN KEY (invitation_id) REFERENCES ibexa_user_invitation(id) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/bundle/Migration/sql/rename-schema-to-5-0-sqlite.sql b/src/bundle/Migration/sql/rename-schema-to-5-0-sqlite.sql new file mode 100644 index 0000000..907664f --- /dev/null +++ b/src/bundle/Migration/sql/rename-schema-to-5-0-sqlite.sql @@ -0,0 +1,23 @@ +ALTER TABLE ibexa_user_invitations RENAME TO ibexa_user_invitation; +-- ibexa:sql-statement-separator +DROP INDEX ibexa_user_invitations_email_idx; +-- ibexa:sql-statement-separator +CREATE INDEX ibexa_user_invitation_email_idx ON ibexa_user_invitation (email); +-- ibexa:sql-statement-separator +DROP INDEX ibexa_user_invitations_hash_idx; +-- ibexa:sql-statement-separator +CREATE INDEX ibexa_user_invitation_hash_idx ON ibexa_user_invitation (hash); +-- ibexa:sql-statement-separator +DROP INDEX ibexa_user_invitations_email_uindex; +-- ibexa:sql-statement-separator +CREATE UNIQUE INDEX ibexa_user_invitation_email_uindex ON ibexa_user_invitation (email); +-- ibexa:sql-statement-separator +DROP INDEX ibexa_user_invitations_hash_uindex; +-- ibexa:sql-statement-separator +CREATE UNIQUE INDEX ibexa_user_invitation_hash_uindex ON ibexa_user_invitation (hash); +-- ibexa:sql-statement-separator +ALTER TABLE ibexa_user_invitations_assignments RENAME TO ibexa_user_invitation_assignment; +-- ibexa:sql-statement-separator +DROP INDEX IDX_DA5A7872A35D7AF0; +-- ibexa:sql-statement-separator +CREATE INDEX IDX_9E1E6F70A35D7AF0 ON ibexa_user_invitation_assignment (invitation_id); diff --git a/src/bundle/Resources/config/services/installer.yaml b/src/bundle/Resources/config/services/installer.yaml index fd15d75..67eaa4d 100644 --- a/src/bundle/Resources/config/services/installer.yaml +++ b/src/bundle/Resources/config/services/installer.yaml @@ -12,3 +12,11 @@ services: $connection: '@ibexa.persistence.connection' tags: - { name: !php/const Ibexa\Contracts\DoctrineMigrations\Migrations\IbexaMigrationTag::TAG } + + Ibexa\Bundle\User\Migration\RenameSchemaTo5_0Migration: + autowire: true + public: false + arguments: + $connection: '@ibexa.persistence.connection' + tags: + - { name: !php/const Ibexa\Contracts\DoctrineMigrations\Migrations\IbexaMigrationTag::TAG }