Fix performance issue in filtering checkin list (Z#23170917) (#4607)

* Fix performance issue in filtering checkin list

* remove test
This commit is contained in:
Raphael Michel
2024-11-06 12:30:37 +01:00
committed by GitHub
parent d8bac7db65
commit 4ca9a43890
3 changed files with 12 additions and 5 deletions

View File

@@ -141,7 +141,7 @@ class CheckinList(LoggedModel):
return self.positions_query(ignore_status=False)
@scopes_disabled()
def positions_inside_query(self, ignore_status=False, at_time=None):
def _filter_positions_inside(self, qs, at_time=None):
if at_time is None:
c_q = []
else:
@@ -149,7 +149,7 @@ class CheckinList(LoggedModel):
if "postgresql" not in settings.DATABASES["default"]["ENGINE"]:
# Use a simple approach that works on all databases
qs = self.positions_query(ignore_status=ignore_status).annotate(
qs = qs.annotate(
last_entry=Subquery(
Checkin.objects.filter(
*c_q,
@@ -202,7 +202,7 @@ class CheckinList(LoggedModel):
.values("position_id", "type", "datetime", "cnt_exists_after")
.query.sql_with_params()
)
return self.positions_query(ignore_status=ignore_status).filter(
return qs.filter(
pk__in=RawSQL(
f"""
SELECT "position_id"
@@ -214,6 +214,10 @@ class CheckinList(LoggedModel):
)
)
@scopes_disabled()
def positions_inside_query(self, ignore_status=False, at_time=None):
return self._filter_positions_inside(self.positions_query(ignore_status=ignore_status), at_time=at_time)
@property
def positions_inside(self):
return self.positions_inside_query(None)