From 69a3fd4584546bd05525fba7b237e309b16d527b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isak=20Ohlsson=20=C3=85ngnell?= <40887124+islean@users.noreply.github.com> Date: Mon, 14 Oct 2024 09:54:25 +0200 Subject: [PATCH] Add cascading (#3823) (patch) ### Fixed - Cascading properties from the devices project --- ...8_3b165ec34791_add_cascading_properties.py | 238 ++++++++++++++++++ cg/store/models.py | 30 ++- 2 files changed, 260 insertions(+), 8 deletions(-) create mode 100644 alembic/versions/2024_10_08_3b165ec34791_add_cascading_properties.py diff --git a/alembic/versions/2024_10_08_3b165ec34791_add_cascading_properties.py b/alembic/versions/2024_10_08_3b165ec34791_add_cascading_properties.py new file mode 100644 index 0000000000..7a2b41622c --- /dev/null +++ b/alembic/versions/2024_10_08_3b165ec34791_add_cascading_properties.py @@ -0,0 +1,238 @@ +"""Add cascading properties + +Revision ID: 3b165ec34791 +Revises: d6474325c722 +Create Date: 2024-10-08 13:53:19.792628 + +""" + +import sqlalchemy as sa + +from alembic import op + +# revision identifiers, used by Alembic. +revision = "3b165ec34791" +down_revision = "d6474325c722" +branch_labels = None +depends_on = None + +illumina_flow_cell_fk_name = "illumina_flow_cell_ibfk_1" +pacbio_smrt_cell_fk_name = "pacbio_smrt_cell_ibfk_1" +instrument_run_fk_name = "fk_device_id" +illumina_sequencing_run_fk_name = "illumina_sequencing_run_ibfk_1" +pacbio_sequencing_run_fk_name = "pacbio_sequencing_run_ibfk_1" +sample_run_metrics_fk_name = "fk_run_metrics_id" +illumina_sample_sequencing_metrics_fk_name = "illumina_sample_sequencing_metrics_ibfk_1" +pacbio_sample_run_metrics_fk_name = "pacbio_sample_run_metrics_ibfk_1" + + +def upgrade(): + op.drop_constraint( + table_name="illumina_flow_cell", + type_="foreignkey", + constraint_name=illumina_flow_cell_fk_name, + ) + op.create_foreign_key( + constraint_name=illumina_flow_cell_fk_name, + source_table="illumina_flow_cell", + referent_table="run_device", + ondelete="CASCADE", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="pacbio_smrt_cell", type_="foreignkey", constraint_name=pacbio_smrt_cell_fk_name + ) + op.create_foreign_key( + constraint_name=pacbio_smrt_cell_fk_name, + source_table="pacbio_smrt_cell", + referent_table="run_device", + ondelete="CASCADE", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="instrument_run", type_="foreignkey", constraint_name=instrument_run_fk_name + ) + op.create_foreign_key( + constraint_name=instrument_run_fk_name, + source_table="instrument_run", + referent_table="run_device", + ondelete="CASCADE", + local_cols=["device_id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="illumina_sequencing_run", + type_="foreignkey", + constraint_name=illumina_sequencing_run_fk_name, + ) + op.create_foreign_key( + constraint_name=illumina_sequencing_run_fk_name, + source_table="illumina_sequencing_run", + referent_table="instrument_run", + ondelete="CASCADE", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="pacbio_sequencing_run", + type_="foreignkey", + constraint_name=pacbio_sequencing_run_fk_name, + ) + op.create_foreign_key( + constraint_name=pacbio_sequencing_run_fk_name, + source_table="pacbio_sequencing_run", + referent_table="instrument_run", + ondelete="CASCADE", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="sample_run_metrics", + type_="foreignkey", + constraint_name=sample_run_metrics_fk_name, + ) + op.create_foreign_key( + constraint_name=sample_run_metrics_fk_name, + source_table="sample_run_metrics", + referent_table="instrument_run", + ondelete="CASCADE", + local_cols=["instrument_run_id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="illumina_sample_sequencing_metrics", + type_="foreignkey", + constraint_name=illumina_sample_sequencing_metrics_fk_name, + ) + op.create_foreign_key( + constraint_name=illumina_sample_sequencing_metrics_fk_name, + source_table="illumina_sample_sequencing_metrics", + referent_table="sample_run_metrics", + ondelete="CASCADE", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="pacbio_sample_run_metrics", + type_="foreignkey", + constraint_name=pacbio_sample_run_metrics_fk_name, + ) + op.create_foreign_key( + constraint_name=pacbio_sample_run_metrics_fk_name, + source_table="pacbio_sample_run_metrics", + referent_table="sample_run_metrics", + ondelete="CASCADE", + local_cols=["id"], + remote_cols=["id"], + ) + + +def downgrade(): + op.drop_constraint( + table_name="pacbio_sample_run_metrics", + type_="foreignkey", + constraint_name=pacbio_sample_run_metrics_fk_name, + ) + op.create_foreign_key( + constraint_name=pacbio_sample_run_metrics_fk_name, + source_table="pacbio_sample_run_metrics", + referent_table="sample_run_metrics", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="illumina_sample_sequencing_metrics", + type_="foreignkey", + constraint_name=illumina_sample_sequencing_metrics_fk_name, + ) + op.create_foreign_key( + constraint_name=illumina_sample_sequencing_metrics_fk_name, + source_table="illumina_sample_sequencing_metrics", + referent_table="sample_run_metrics", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="sample_run_metrics", + type_="foreignkey", + constraint_name=sample_run_metrics_fk_name, + ) + op.create_foreign_key( + constraint_name=sample_run_metrics_fk_name, + source_table="sample_run_metrics", + referent_table="instrument_run", + local_cols=["instrument_run_id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="pacbio_sequencing_run", + type_="foreignkey", + constraint_name=pacbio_sequencing_run_fk_name, + ) + op.create_foreign_key( + constraint_name=pacbio_sequencing_run_fk_name, + source_table="pacbio_sequencing_run", + referent_table="instrument_run", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="illumina_sequencing_run", + type_="foreignkey", + constraint_name=illumina_sequencing_run_fk_name, + ) + op.create_foreign_key( + constraint_name=illumina_sequencing_run_fk_name, + source_table="illumina_sequencing_run", + referent_table="instrument_run", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="instrument_run", type_="foreignkey", constraint_name=instrument_run_fk_name + ) + op.create_foreign_key( + constraint_name=instrument_run_fk_name, + source_table="instrument_run", + referent_table="run_device", + local_cols=["device_id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="pacbio_smrt_cell", type_="foreignkey", constraint_name=pacbio_smrt_cell_fk_name + ) + op.create_foreign_key( + constraint_name=pacbio_smrt_cell_fk_name, + source_table="pacbio_smrt_cell", + referent_table="run_device", + local_cols=["id"], + remote_cols=["id"], + ) + + op.drop_constraint( + table_name="illumina_flow_cell", + type_="foreignkey", + constraint_name=illumina_flow_cell_fk_name, + ) + op.create_foreign_key( + constraint_name=illumina_flow_cell_fk_name, + source_table="illumina_flow_cell", + referent_table="run_device", + local_cols=["id"], + remote_cols=["id"], + ) diff --git a/cg/store/models.py b/cg/store/models.py index 103acb37e7..f1aea748cd 100644 --- a/cg/store/models.py +++ b/cg/store/models.py @@ -1014,7 +1014,9 @@ class IlluminaFlowCell(RunDevice): __tablename__ = "illumina_flow_cell" - id: Mapped[int] = mapped_column(ForeignKey("run_device.id"), primary_key=True) + id: Mapped[int] = mapped_column( + ForeignKey("run_device.id", ondelete="CASCADE"), primary_key=True + ) model: Mapped[str | None] = mapped_column( types.Enum("10B", "25B", "1.5B", "S1", "S2", "S4", "SP") ) @@ -1027,7 +1029,9 @@ class PacbioSMRTCell(RunDevice): __tablename__ = "pacbio_smrt_cell" - id: Mapped[int] = mapped_column(ForeignKey("run_device.id"), primary_key=True) + id: Mapped[int] = mapped_column( + ForeignKey("run_device.id", ondelete="CASCADE"), primary_key=True + ) __mapper_args__ = {"polymorphic_identity": DeviceType.PACBIO} @@ -1039,7 +1043,7 @@ class InstrumentRun(Base): id: Mapped[PrimaryKeyInt] type: Mapped[DeviceType] - device_id: Mapped[int] = mapped_column(ForeignKey("run_device.id")) + device_id: Mapped[int] = mapped_column(ForeignKey("run_device.id", ondelete="CASCADE")) device: Mapped[RunDevice] = orm.relationship(back_populates="instrument_runs") sample_metrics: Mapped[list["SampleRunMetrics"]] = orm.relationship( @@ -1054,7 +1058,9 @@ class InstrumentRun(Base): class IlluminaSequencingRun(InstrumentRun): __tablename__ = "illumina_sequencing_run" - id: Mapped[int] = mapped_column(ForeignKey("instrument_run.id"), primary_key=True) + id: Mapped[int] = mapped_column( + ForeignKey("instrument_run.id", ondelete="CASCADE"), primary_key=True + ) sequencer_type: Mapped[str | None] = mapped_column( types.Enum("hiseqga", "hiseqx", "novaseq", "novaseqx") ) @@ -1090,7 +1096,9 @@ def to_dict(self): class PacbioSequencingRun(InstrumentRun): __tablename__ = "pacbio_sequencing_run" - id: Mapped[int] = mapped_column(ForeignKey("instrument_run.id"), primary_key=True) + id: Mapped[int] = mapped_column( + ForeignKey("instrument_run.id", ondelete="CASCADE"), primary_key=True + ) well: Mapped[Str32] plate: Mapped[int] run_name: Mapped[Str32 | None] @@ -1135,7 +1143,9 @@ class SampleRunMetrics(Base): __tablename__ = "sample_run_metrics" id: Mapped[PrimaryKeyInt] sample_id: Mapped[int] = mapped_column(ForeignKey("sample.id")) - instrument_run_id: Mapped[int] = mapped_column(ForeignKey("instrument_run.id")) + instrument_run_id: Mapped[int] = mapped_column( + ForeignKey("instrument_run.id", ondelete="CASCADE") + ) type: Mapped[DeviceType] instrument_run: Mapped[InstrumentRun] = orm.relationship(back_populates="sample_metrics") @@ -1151,7 +1161,9 @@ class IlluminaSampleSequencingMetrics(SampleRunMetrics): __tablename__ = "illumina_sample_sequencing_metrics" - id: Mapped[int] = mapped_column(ForeignKey("sample_run_metrics.id"), primary_key=True) + id: Mapped[int] = mapped_column( + ForeignKey("sample_run_metrics.id", ondelete="CASCADE"), primary_key=True + ) flow_cell_lane: Mapped[int | None] total_reads_in_lane: Mapped[BigInt | None] base_passing_q30_percent: Mapped[Num_6_2 | None] @@ -1167,7 +1179,9 @@ class PacbioSampleSequencingMetrics(SampleRunMetrics): __tablename__ = "pacbio_sample_run_metrics" - id: Mapped[int] = mapped_column(ForeignKey("sample_run_metrics.id"), primary_key=True) + id: Mapped[int] = mapped_column( + ForeignKey("sample_run_metrics.id", ondelete="CASCADE"), primary_key=True + ) hifi_reads: Mapped[BigInt] hifi_yield: Mapped[BigInt] hifi_mean_read_length: Mapped[BigInt]