Skip to content

Commit

Permalink
Merge pull request #4429 from Jonathan2022Bausch/8.3-dimensionhash-mi…
Browse files Browse the repository at this point in the history
…gration-to-postgres

BUGFIX: add dimensionshash migration to postgres
  • Loading branch information
markusguenther committed Jan 5, 2024
2 parents 5dc36a6 + 8df08fa commit 191f96c
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions Neos.Neos/Migrations/Postgresql/Version20230727164600.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php
declare(strict_types=1);

namespace Neos\Flow\Persistence\Doctrine\Migrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Neos\ContentRepository\Utility;

final class Version20230727164600 extends AbstractMigration
{
public function getDescription() : string
{
return 'add dimensions hash to node event model';
}

/**
* @param Schema $schema
* @throws \Doctrine\DBAL\Exception
*/
public function up(Schema $schema) : void
{
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on "postgresql".');

$this->addSql('ALTER TABLE neos_neos_eventlog_domain_model_event ADD dimensionshash VARCHAR(32) DEFAULT NULL');
$this->addSql('CREATE INDEX dimensionshash ON neos_neos_eventlog_domain_model_event (dimensionshash)');
}

/**
* @param Schema $schema
* @throws \Doctrine\DBAL\Exception
*/
public function down(Schema $schema) : void
{
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on "postgresql".');

$this->addSql('DROP INDEX dimensionshash');
$this->addSql('ALTER TABLE neos_neos_eventlog_domain_model_event DROP dimensionshash');
}

/**
* @param Schema $schema
* @throws \Doctrine\DBAL\Driver\Exception
* @throws \Doctrine\DBAL\Exception
*/
public function postUp(Schema $schema): void
{
$eventLogResult = $this->connection->executeQuery('SELECT dimension FROM neos_neos_eventlog_domain_model_event where dimensionshash IS NULL AND dimension IS NOT NULL LIMIT 1');

while ($eventLogInfo = $eventLogResult->fetchAssociative()) {
$dimensionsArray = unserialize($eventLogInfo['dimension'], ['allowed_classes' => false]);
$dimensionsHash = Utility::sortDimensionValueArrayAndReturnDimensionsHash($dimensionsArray);
$this->connection->executeStatement('UPDATE neos_neos_eventlog_domain_model_event SET dimensionshash = ? WHERE dimension = ?', [$dimensionsHash, $eventLogInfo['dimension']]);
$eventLogResult = $this->connection->executeQuery('SELECT dimension FROM neos_neos_eventlog_domain_model_event where dimensionshash IS NULL AND dimension IS NOT NULL LIMIT 1');
}
}
}

0 comments on commit 191f96c

Please sign in to comment.