migrations/Version20260302120000.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * Numbered replay support and unclean-stop closure metadata.
  8.  */
  9. final class Version20260302120000 extends AbstractMigration
  10. {
  11.     public function getDescription() : string
  12.     {
  13.         return 'Add source period/item dedupe metadata and unclean-stop closure fields.';
  14.     }
  15.     public function up(Schema $schema) : void
  16.     {
  17.         $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql''Migration can only be executed safely on \'postgresql\'.');
  18.         $this->addSql('ALTER TABLE data_samples ADD ingest_mode VARCHAR(16) DEFAULT NULL');
  19.         $this->addSql('ALTER TABLE data_samples ADD source_period INT DEFAULT NULL');
  20.         $this->addSql('ALTER TABLE data_samples ADD source_item INT DEFAULT NULL');
  21.         $this->addSql('ALTER TABLE data_samples ADD sample_seq INT DEFAULT NULL');
  22.         $this->addSql('COMMENT ON COLUMN data_samples.ingest_mode IS \'Ingest mode: live or replay.\'');
  23.         $this->addSql('COMMENT ON COLUMN data_samples.source_period IS \'Source period from device.\'');
  24.         $this->addSql('COMMENT ON COLUMN data_samples.source_item IS \'Source item from device.\'');
  25.         $this->addSql('COMMENT ON COLUMN data_samples.sample_seq IS \'Optional sample sequence from device.\'');
  26.         $this->addSql('CREATE INDEX IDX_7D990186_SRC_PERIOD ON data_samples (source_period)');
  27.         $this->addSql('CREATE INDEX IDX_7D990186_SRC_ITEM ON data_samples (source_item)');
  28.         $this->addSql('CREATE UNIQUE INDEX UNIQ_DS_DEV_PERIOD_ITEM ON data_samples (device_id, source_period, source_item) WHERE source_period IS NOT NULL AND source_item IS NOT NULL');
  29.         $this->addSql('ALTER TABLE measurements ADD source_period INT DEFAULT NULL');
  30.         $this->addSql('ALTER TABLE measurements ADD last_sample_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL');
  31.         $this->addSql('ALTER TABLE measurements ADD end_reason VARCHAR(32) DEFAULT NULL');
  32.         $this->addSql('COMMENT ON COLUMN measurements.source_period IS \'Source period from device.\'');
  33.         $this->addSql('COMMENT ON COLUMN measurements.last_sample_at IS \'Last sample timestamp received for this measurement.\'');
  34.         $this->addSql('COMMENT ON COLUMN measurements.end_reason IS \'End reason: NORMAL_STOP or UNCLEAN_STOP.\'');
  35.         $this->addSql('CREATE INDEX IDX_71920F21_SRC_PERIOD ON measurements (source_period)');
  36.         $this->addSql('CREATE INDEX IDX_71920F21_LAST_SAMPLE_AT ON measurements (last_sample_at)');
  37.         $this->addSql('CREATE UNIQUE INDEX UNIQ_M_DEV_PERIOD ON measurements (device_id, source_period) WHERE source_period IS NOT NULL');
  38.     }
  39.     public function down(Schema $schema) : void
  40.     {
  41.         $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql''Migration can only be executed safely on \'postgresql\'.');
  42.         $this->addSql('DROP INDEX IF EXISTS UNIQ_M_DEV_PERIOD');
  43.         $this->addSql('DROP INDEX IF EXISTS IDX_71920F21_LAST_SAMPLE_AT');
  44.         $this->addSql('DROP INDEX IF EXISTS IDX_71920F21_SRC_PERIOD');
  45.         $this->addSql('ALTER TABLE measurements DROP source_period');
  46.         $this->addSql('ALTER TABLE measurements DROP last_sample_at');
  47.         $this->addSql('ALTER TABLE measurements DROP end_reason');
  48.         $this->addSql('DROP INDEX IF EXISTS UNIQ_DS_DEV_PERIOD_ITEM');
  49.         $this->addSql('DROP INDEX IF EXISTS IDX_7D990186_SRC_PERIOD');
  50.         $this->addSql('DROP INDEX IF EXISTS IDX_7D990186_SRC_ITEM');
  51.         $this->addSql('ALTER TABLE data_samples DROP ingest_mode');
  52.         $this->addSql('ALTER TABLE data_samples DROP source_period');
  53.         $this->addSql('ALTER TABLE data_samples DROP source_item');
  54.         $this->addSql('ALTER TABLE data_samples DROP sample_seq');
  55.     }
  56. }