Skip to content

Commit

Permalink
Convert partial indexes to unique constraints and remove dependency
Browse files Browse the repository at this point in the history
Fixes #1355
  • Loading branch information
sainak committed Jun 13, 2023
1 parent a1197d3 commit d953637
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 80 deletions.
46 changes: 0 additions & 46 deletions care/facility/migrations/0001_initial_squashed.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import django.utils.timezone
import fernet_fields.fields
import multiselectfield.db.fields
import partial_index
import simple_history.models
from django.conf import settings
from django.db import migrations, models
Expand Down Expand Up @@ -6968,15 +6967,6 @@ class Migration(migrations.Migration):
fields=["-created_date"], name="facility_in_created_ea2255_idx"
),
),
migrations.AddIndex(
model_name="hospitaldoctors",
index=partial_index.PartialIndex(
fields=["facility", "area"],
name="facility_ho_facilit_ec08f4_partial",
unique=True,
where=partial_index.PQ(deleted=False),
),
),
migrations.AlterUniqueTogether(
name="facilityuser",
unique_together={("facility", "user")},
Expand Down Expand Up @@ -7019,24 +7009,6 @@ class Migration(migrations.Migration):
name="cons_facilitylocalgovtbody_only_one_null",
),
),
migrations.AddIndex(
model_name="facilityinventorysummary",
index=partial_index.PartialIndex(
fields=["facility", "item"],
name="facility_fa_facilit_ff33b8_partial",
unique=True,
where=partial_index.PQ(deleted=False),
),
),
migrations.AddIndex(
model_name="facilityinventoryminquantity",
index=partial_index.PartialIndex(
fields=["facility", "item"],
name="facility_fa_facilit_a9eb9a_partial",
unique=True,
where=partial_index.PQ(deleted=False),
),
),
migrations.AddIndex(
model_name="facilityinventoryburnrate",
index=models.Index(
Expand All @@ -7047,15 +7019,6 @@ class Migration(migrations.Migration):
name="facilityinventoryburnrate",
unique_together={("facility", "item")},
),
migrations.AddIndex(
model_name="facilitycapacity",
index=partial_index.PartialIndex(
fields=["facility", "room_type"],
name="facility_fa_facilit_ec2b0e_partial",
unique=True,
where=partial_index.PQ(deleted=False),
),
),
migrations.AddIndex(
model_name="districtscopedsummary",
index=models.Index(
Expand All @@ -7079,15 +7042,6 @@ class Migration(migrations.Migration):
name="facility_di_created_45003b_idx",
),
),
migrations.AddIndex(
model_name="disease",
index=partial_index.PartialIndex(
fields=["patient", "disease"],
name="facility_di_patient_640ef7_partial",
unique=True,
where=partial_index.PQ(deleted=False),
),
),
migrations.AddConstraint(
model_name="asset",
constraint=models.UniqueConstraint(
Expand Down
72 changes: 72 additions & 0 deletions care/facility/migrations/0002_auto_20230613_1657.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Generated by Django 2.2.11 on 2023-06-13 11:27

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("facility", "0001_initial_squashed"),
]

operations = [
migrations.RunSQL(
sql="DROP INDEX IF EXISTS facility_di_patient_640ef7_partial",
reverse_sql=migrations.RunSQL.noop,
),
migrations.RunSQL(
sql="DROP INDEX IF EXISTS facility_fa_facilit_ec2b0e_partial",
reverse_sql=migrations.RunSQL.noop,
),
migrations.RunSQL(
sql="DROP INDEX IF EXISTS facility_fa_facilit_a9eb9a_partial",
reverse_sql=migrations.RunSQL.noop,
),
migrations.RunSQL(
sql="DROP INDEX IF EXISTS facility_fa_facilit_ff33b8_partial",
reverse_sql=migrations.RunSQL.noop,
),
migrations.RunSQL(
sql="DROP INDEX IF EXISTS facility_ho_facilit_ec08f4_partial",
reverse_sql=migrations.RunSQL.noop,
),
migrations.AddConstraint(
model_name="disease",
constraint=models.UniqueConstraint(
condition=models.Q(deleted=False),
fields=("patient", "disease"),
name="unique_patient_disease",
),
),
migrations.AddConstraint(
model_name="facilitycapacity",
constraint=models.UniqueConstraint(
condition=models.Q(deleted=False),
fields=("facility", "room_type"),
name="unique_facility_room_type",
),
),
migrations.AddConstraint(
model_name="facilityinventoryminquantity",
constraint=models.UniqueConstraint(
condition=models.Q(deleted=False),
fields=("facility", "item"),
name="unique_facility_item_min_quantity",
),
),
migrations.AddConstraint(
model_name="facilityinventorysummary",
constraint=models.UniqueConstraint(
condition=models.Q(deleted=False),
fields=("facility", "item"),
name="unique_facility_item_summary",
),
),
migrations.AddConstraint(
model_name="hospitaldoctors",
constraint=models.UniqueConstraint(
condition=models.Q(deleted=False),
fields=("facility", "area"),
name="unique_facility_doctor",
),
),
]
17 changes: 10 additions & 7 deletions care/facility/models/facility.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from django.core.validators import MinValueValidator
from django.db import models
from multiselectfield import MultiSelectField
from partial_index import PQ, PartialIndex
from simple_history.models import HistoricalRecords

from care.facility.models import FacilityBaseModel, phone_number_regex, reverse_choices
Expand Down Expand Up @@ -269,9 +268,11 @@ def __str__(self):
return str(self.facility) + str(self.count)

class Meta:
indexes = [
PartialIndex(
fields=["facility", "area"], unique=True, where=PQ(deleted=False)
constraints = [
models.UniqueConstraint(
fields=["facility", "area"],
condition=models.Q(deleted=False),
name="unique_facility_doctor",
)
]

Expand All @@ -294,9 +295,11 @@ class FacilityCapacity(FacilityBaseModel, FacilityRelatedPermissionMixin):
history = HistoricalRecords()

class Meta:
indexes = [
PartialIndex(
fields=["facility", "room_type"], unique=True, where=PQ(deleted=False)
constraints = [
models.UniqueConstraint(
fields=["facility", "room_type"],
condition=models.Q(deleted=False),
name="unique_facility_room_type",
)
]
verbose_name_plural = "Facility Capacities"
Expand Down
17 changes: 10 additions & 7 deletions care/facility/models/inventory.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from django.contrib.auth import get_user_model
from django.db import models
from django.db.models import Index
from partial_index import PQ, PartialIndex

from care.facility.models import FacilityBaseModel
from care.facility.models.mixins.permissions.facility import (
Expand Down Expand Up @@ -138,9 +137,11 @@ class FacilityInventorySummary(FacilityBaseModel, FacilityRelatedPermissionMixin
is_low = models.BooleanField(default=False)

class Meta:
indexes = [
PartialIndex(
fields=["facility", "item"], unique=True, where=PQ(deleted=False)
constraints = [
models.UniqueConstraint(
fields=["facility", "item"],
condition=models.Q(deleted=False),
name="unique_facility_item_summary",
)
]

Expand All @@ -159,9 +160,11 @@ class FacilityInventoryMinQuantity(FacilityBaseModel, FacilityRelatedPermissionM
min_quantity = models.FloatField(default=0)

class Meta:
indexes = [
PartialIndex(
fields=["facility", "item"], unique=True, where=PQ(deleted=False)
constraints = [
models.UniqueConstraint(
fields=["facility", "item"],
condition=models.Q(deleted=False),
name="unique_facility_item_min_quantity",
)
]

Expand Down
9 changes: 4 additions & 5 deletions care/facility/models/patient.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from fernet_fields import EncryptedCharField, EncryptedIntegerField
from partial_index import PQ, PartialIndex
from simple_history.models import HistoricalRecords

from care.facility.models import (
Expand Down Expand Up @@ -697,11 +696,11 @@ class Disease(models.Model):
objects = BaseManager()

class Meta:
indexes = [
PartialIndex(
constraints = [
models.UniqueConstraint(
fields=["patient", "disease"],
unique=True,
where=PQ(deleted=False),
condition=models.Q(deleted=False),
name="unique_patient_disease",
)
]

Expand Down
10 changes: 0 additions & 10 deletions care/users/migrations/0001_initial_squashed.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import django.core.validators
import django.db.models.deletion
import django.utils.timezone
import partial_index
from django.conf import settings
from django.db import migrations, models

Expand Down Expand Up @@ -509,15 +508,6 @@ class Migration(migrations.Migration):
to="users.Ward",
),
),
migrations.AddIndex(
model_name="userskill",
index=partial_index.PartialIndex(
fields=["skill", "user"],
name="users_users_skill_i_6ebc32_partial",
unique=True,
where=partial_index.PQ(deleted=False),
),
),
migrations.AlterUniqueTogether(
name="localbody",
unique_together={("district", "body_type", "name")},
Expand Down
24 changes: 24 additions & 0 deletions care/users/migrations/0003_auto_20230613_1657.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 2.2.11 on 2023-06-13 11:27

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("users", "0002_auto_20230613_1622"),
]

operations = [
migrations.RunSQL(
sql="DROP INDEX IF EXISTS users_users_skill_i_6ebc32_partial",
reverse_sql=migrations.RunSQL.noop,
),
migrations.AddConstraint(
model_name="userskill",
constraint=models.UniqueConstraint(
condition=models.Q(deleted=False),
fields=("skill", "user"),
name="unique_user_skill",
),
),
]
9 changes: 6 additions & 3 deletions care/users/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from django.db import models
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from partial_index import PQ, PartialIndex

from care.utils.models.base import BaseModel

Expand Down Expand Up @@ -168,8 +167,12 @@ class UserSkill(BaseModel):
skill = models.ForeignKey("Skill", on_delete=models.CASCADE, null=True, blank=True)

class Meta:
indexes = [
PartialIndex(fields=["skill", "user"], unique=True, where=PQ(deleted=False))
constraints = [
models.UniqueConstraint(
fields=["skill", "user"],
condition=models.Q(deleted=False),
name="unique_user_skill",
)
]


Expand Down
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ known_third_party = [
"jsonschema",
"jwt",
"multiselectfield",
"partial_index",
"phonenumber_field",
"phonenumbers",
"pytz",
Expand Down
1 change: 0 additions & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ drf-yasg==1.17.1 # For Api Docs
django-filter==2.4.0
drf-nested-routers==0.91
django-multiselectfield==0.1.12 # https://github.com/goinnn/django-multiselectfield
django-partial-index==0.6.0 # https://github.com/mattiaslinnap/django-partial-index/blob/master/README.md
django-simple-history==2.8.0 # https://django-simple-history.readthedocs.io/en/latest/quick_start.html
django-ratelimit==2.0.0 # Limiting Requests
django-fernet-fields==0.6 # https://django-fernet-fields.readthedocs.io/en/latest/
Expand Down

0 comments on commit d953637

Please sign in to comment.