Skip to content

Commit 88a6d90

Browse files
committed
Optimize AdvisoryV2QuerySet
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 1311fd7 commit 88a6d90

File tree

1 file changed

+41
-20
lines changed

1 file changed

+41
-20
lines changed

vulnerabilities/models.py

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2862,37 +2862,58 @@ def latest_for_avid(self, avid: str):
28622862
)
28632863

28642864
def latest_per_avid(self):
2865-
latest_ids = (
2866-
self.filter(avid=OuterRef("avid"))
2867-
.order_by(
2868-
F("date_collected").desc(nulls_last=True),
2869-
"-id",
2870-
)
2871-
.values("id")[:1]
2872-
)
2873-
2874-
return self.filter(id=Subquery(latest_ids))
2865+
return self.order_by(
2866+
"avid",
2867+
F("date_collected").desc(nulls_last=True),
2868+
"-id",
2869+
).distinct("avid")
28752870

28762871
def latest_for_avids(self, avids):
28772872
return self.filter(avid__in=avids).latest_per_avid()
28782873

28792874
def latest_affecting_advisories_for_purl(self, purl):
2880-
return self.filter(
2881-
impacted_packages__affecting_packages__package_url=purl
2882-
).latest_per_avid()
2875+
affecting_exists = ImpactedPackageAffecting.objects.filter(
2876+
impacted_package__advisory_id=OuterRef("pk"),
2877+
package__package_url=purl,
2878+
)
2879+
2880+
return (
2881+
self.annotate(has_affecting=Exists(affecting_exists))
2882+
.filter(has_affecting=True)
2883+
.latest_per_avid()
2884+
)
28832885

28842886
def latest_affecting_advisories_for_purls(self, purls):
2885-
return self.filter(
2886-
impacted_packages__affecting_packages__package_url__in=purls
2887-
).latest_per_avid()
2887+
affecting_exists = ImpactedPackageAffecting.objects.filter(
2888+
impacted_package__advisory_id=OuterRef("pk"),
2889+
package__package_url__in=purls,
2890+
)
2891+
2892+
return (
2893+
self.annotate(has_affecting=Exists(affecting_exists))
2894+
.filter(has_affecting=True)
2895+
.latest_per_avid()
2896+
)
28882897

28892898
def latest_fixed_by_advisories_for_purl(self, purl):
2890-
return self.filter(impacted_packages__fixed_by_packages__package_url=purl).latest_per_avid()
2899+
fixed_exists = ImpactedPackageFixedBy.objects.filter(
2900+
impacted_package__advisory_id=OuterRef("pk"),
2901+
package__package_url=purl,
2902+
)
2903+
2904+
return (
2905+
self.annotate(has_fixed=Exists(fixed_exists)).filter(has_fixed=True).latest_per_avid()
2906+
)
28912907

28922908
def latest_fixed_by_advisories_for_purls(self, purls):
2893-
return self.filter(
2894-
impacted_packages__fixed_by_packages__package_url__in=purls
2895-
).latest_per_avid()
2909+
fixed_exists = ImpactedPackageFixedBy.objects.filter(
2910+
impacted_package__advisory_id=OuterRef("pk"),
2911+
package__package_url__in=purls,
2912+
)
2913+
2914+
return (
2915+
self.annotate(has_fixed=Exists(fixed_exists)).filter(has_fixed=True).latest_per_avid()
2916+
)
28962917

28972918
def latest_advisories_for_purl(self, purl):
28982919
return self.filter(

0 commit comments

Comments
 (0)