Keep address migration identifiers PostgreSQL-safe
This commit is contained in:
@@ -252,6 +252,7 @@ class ContactPointQualityDecision(Base, TimestampMixin):
|
|||||||
"effective_until",
|
"effective_until",
|
||||||
),
|
),
|
||||||
Index("ix_addresses_quality_state", "tenant_id", "state", "effective_until"),
|
Index("ix_addresses_quality_state", "tenant_id", "state", "effective_until"),
|
||||||
|
Index("ix_addresses_quality_created_by", "created_by_account_id"),
|
||||||
)
|
)
|
||||||
|
|
||||||
id: Mapped[str] = mapped_column(String(36), primary_key=True, default=new_uuid)
|
id: Mapped[str] = mapped_column(String(36), primary_key=True, default=new_uuid)
|
||||||
@@ -269,7 +270,7 @@ class ContactPointQualityDecision(Base, TimestampMixin):
|
|||||||
evidence_ref: Mapped[str | None] = mapped_column(String(1000), nullable=True)
|
evidence_ref: Mapped[str | None] = mapped_column(String(1000), nullable=True)
|
||||||
effective_from: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, index=True)
|
effective_from: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, index=True)
|
||||||
effective_until: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True, index=True)
|
effective_until: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True, index=True)
|
||||||
created_by_account_id: Mapped[str | None] = mapped_column(String(36), nullable=True, index=True)
|
created_by_account_id: Mapped[str | None] = mapped_column(String(36), nullable=True)
|
||||||
metadata_: Mapped[dict[str, Any]] = mapped_column("metadata", JSON, default=dict, nullable=False)
|
metadata_: Mapped[dict[str, Any]] = mapped_column("metadata", JSON, default=dict, nullable=False)
|
||||||
|
|
||||||
contact: Mapped[Contact] = relationship(back_populates="quality_decisions")
|
contact: Mapped[Contact] = relationship(back_populates="quality_decisions")
|
||||||
|
|||||||
+1
-1
@@ -134,7 +134,7 @@ def upgrade() -> None:
|
|||||||
("ix_addresses_contact_point_quality_decisions_state", ["state"]),
|
("ix_addresses_contact_point_quality_decisions_state", ["state"]),
|
||||||
("ix_addresses_contact_point_quality_decisions_effective_from", ["effective_from"]),
|
("ix_addresses_contact_point_quality_decisions_effective_from", ["effective_from"]),
|
||||||
("ix_addresses_contact_point_quality_decisions_effective_until", ["effective_until"]),
|
("ix_addresses_contact_point_quality_decisions_effective_until", ["effective_until"]),
|
||||||
("ix_addresses_contact_point_quality_decisions_created_by_account_id", ["created_by_account_id"]),
|
("ix_addresses_quality_created_by", ["created_by_account_id"]),
|
||||||
("ix_addresses_quality_current", ["tenant_id", "contact_id", "channel", "contact_point_id", "effective_until"]),
|
("ix_addresses_quality_current", ["tenant_id", "contact_id", "channel", "contact_point_id", "effective_until"]),
|
||||||
("ix_addresses_quality_state", ["tenant_id", "state", "effective_until"]),
|
("ix_addresses_quality_state", ["tenant_id", "state", "effective_until"]),
|
||||||
):
|
):
|
||||||
|
|||||||
@@ -7,11 +7,22 @@ from pathlib import Path
|
|||||||
from alembic.runtime.migration import MigrationContext
|
from alembic.runtime.migration import MigrationContext
|
||||||
from sqlalchemy import create_engine, inspect
|
from sqlalchemy import create_engine, inspect
|
||||||
|
|
||||||
|
from govoplan_addresses.backend.db.models import Base
|
||||||
from govoplan_addresses.backend.manifest import get_manifest
|
from govoplan_addresses.backend.manifest import get_manifest
|
||||||
from govoplan_core.db.migrations import migrate_database
|
from govoplan_core.db.migrations import migrate_database
|
||||||
|
|
||||||
|
|
||||||
class AddressesMigrationTests(unittest.TestCase):
|
class AddressesMigrationTests(unittest.TestCase):
|
||||||
|
def test_schema_identifiers_fit_postgresql_limit(self) -> None:
|
||||||
|
overlong_indexes = sorted(
|
||||||
|
index.name
|
||||||
|
for table in Base.metadata.tables.values()
|
||||||
|
if table.name.startswith("addresses_")
|
||||||
|
for index in table.indexes
|
||||||
|
if index.name and len(index.name) > 63
|
||||||
|
)
|
||||||
|
self.assertEqual([], overlong_indexes)
|
||||||
|
|
||||||
def test_fresh_database_reaches_import_profile_head(self) -> None:
|
def test_fresh_database_reaches_import_profile_head(self) -> None:
|
||||||
with tempfile.TemporaryDirectory(prefix="govoplan-addresses-migration-") as directory:
|
with tempfile.TemporaryDirectory(prefix="govoplan-addresses-migration-") as directory:
|
||||||
url = f"sqlite:///{Path(directory) / 'addresses.db'}"
|
url = f"sqlite:///{Path(directory) / 'addresses.db'}"
|
||||||
|
|||||||
Reference in New Issue
Block a user