mirror of
https://github.com/resf/distro-tools.git
synced 2024-11-22 05:01:26 +00:00
Speed up advisory fetching by manually crafting each where statement (add if exists)
This commit is contained in:
parent
c267eabf78
commit
bb5159cf1c
@ -42,25 +42,62 @@ async def fetch_advisories(
|
|||||||
left outer join advisory_cves c on c.advisory_id = a.id
|
left outer join advisory_cves c on c.advisory_id = a.id
|
||||||
left outer join advisory_fixes f on f.advisory_id = a.id
|
left outer join advisory_fixes f on f.advisory_id = a.id
|
||||||
where
|
where
|
||||||
((select product from vars) is null or exists (select name from advisory_affected_products where advisory_id = a.id and name like '%' || (select product from vars) || '%'))
|
a.published_at is not null
|
||||||
and ((select before from vars) is null or a.published_at < (select before from vars))
|
"""
|
||||||
and ((select after from vars) is null or a.published_at > (select after from vars))
|
|
||||||
and (a.published_at is not null)
|
where_stmt = ""
|
||||||
and ((select cve from vars) is null or exists (select cve from advisory_cves where advisory_id = a.id and cve ilike '%' || (select cve from vars) || '%'))
|
|
||||||
and ((select synopsis from vars) is null or a.synopsis ilike '%' || (select synopsis from vars) || '%')
|
if product:
|
||||||
and ((select severity from vars) is null or a.severity = (select severity from vars))
|
where_stmt += """
|
||||||
and ((select kind from vars) is null or a.kind = (select kind from vars))
|
and exists (select name from advisory_affected_products where advisory_id = a.id and name like '%' || (select product from vars) || '%')
|
||||||
and ((select search from vars) is null or
|
"""
|
||||||
ap.name like '%' || (select product from vars) || '%' or
|
|
||||||
|
if before:
|
||||||
|
where_stmt += """
|
||||||
|
and a.published_at < (select before from vars)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if after:
|
||||||
|
where_stmt += """
|
||||||
|
and a.published_at > (select after from vars)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if cve:
|
||||||
|
where_stmt += """
|
||||||
|
and exists (select cve from advisory_cves where advisory_id = a.id and cve ilike '%' || (select cve from vars) || '%')
|
||||||
|
"""
|
||||||
|
|
||||||
|
if synopsis:
|
||||||
|
where_stmt += """
|
||||||
|
and a.synopsis ilike '%' || (select synopsis from vars) || '%'
|
||||||
|
"""
|
||||||
|
|
||||||
|
if severity:
|
||||||
|
where_stmt += """
|
||||||
|
and a.severity = (select severity from vars)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if kind:
|
||||||
|
where_stmt += """
|
||||||
|
and a.kind = (select kind from vars)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if keyword:
|
||||||
|
where_stmt += """
|
||||||
|
and (ap.name like '%' || (select product from vars) || '%' or
|
||||||
a.synopsis ilike '%' || (select search from vars) || '%' or
|
a.synopsis ilike '%' || (select search from vars) || '%' or
|
||||||
a.description ilike '%' || (select search from vars) || '%' or
|
a.description ilike '%' || (select search from vars) || '%' or
|
||||||
exists (select cve from advisory_cves where advisory_id = a.id and cve ilike '%' || (select search from vars) || '%') or
|
exists (select cve from advisory_cves where advisory_id = a.id and cve ilike '%' || (select search from vars) || '%') or
|
||||||
exists (select ticket_id from advisory_fixes where advisory_id = a.id and ticket_id ilike '%' || (select search from vars) || '%') or
|
exists (select ticket_id from advisory_fixes where advisory_id = a.id and ticket_id ilike '%' || (select search from vars) || '%') or
|
||||||
a.name ilike '%' || (select search from vars) || '%')
|
a.name ilike '%' || (select search from vars) || '%')
|
||||||
|
"""
|
||||||
|
|
||||||
|
a += where_stmt
|
||||||
|
a += """
|
||||||
group by a.id
|
group by a.id
|
||||||
order by a.published_at desc
|
order by a.published_at desc
|
||||||
limit (select size from vars) offset (select page_offset from vars)
|
limit (select size from vars) offset (select page_offset from vars)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
connection = connections.get("default")
|
connection = connections.get("default")
|
||||||
results = await connection.execute_query(
|
results = await connection.execute_query(
|
||||||
|
Loading…
Reference in New Issue
Block a user