@@ -38,10 +38,10 @@ def get_repositories(db_connection: Session, vcs_providers: [VCSProviders] = Non
38
38
"""
39
39
limit_val = MAX_RECORDS_PER_PAGE_LIMIT if limit > MAX_RECORDS_PER_PAGE_LIMIT else limit
40
40
41
- # Get latest scan timestamp
42
- last_scan_timestamp_sub_query = db_connection .query (func . max ( model .DBscan .timestamp )) \
43
- . join ( model . DBrepository , model . repository . DBrepository . id_ == model .scan . DBscan .repository_id ) \
44
- . filter (model .DBscan .repository_id == model . DBrepository . id_ ). scalar_subquery ()
41
+ # Get the latest scan for repository
42
+ repo_last_scan_sub_query = db_connection .query (model .DBscan .repository_id ,
43
+ func . max ( model .DBscan .timestamp ). label ( "max_timestamp" ))
44
+ repo_last_scan_sub_query = repo_last_scan_sub_query . group_by (model .DBscan .repository_id ). subquery ()
45
45
46
46
query = db_connection .query (
47
47
model .DBrepository .id_ ,
@@ -52,12 +52,14 @@ def get_repositories(db_connection: Session, vcs_providers: [VCSProviders] = Non
52
52
model .DBrepository .vcs_instance ,
53
53
model .DBVcsInstance .provider_type ,
54
54
func .coalesce (model .DBscan .id_ , None ).label ('last_scan_id' ),
55
- func .coalesce (model .DBscan .timestamp , None ).label ('last_scan_timestamp' )) \
56
- .join (model .DBVcsInstance ,
57
- model .vcs_instance .DBVcsInstance .id_ == model .repository .DBrepository .vcs_instance ) \
58
- .outerjoin (model .DBscan ,
59
- and_ (model .scan .DBscan .repository_id == model .repository .DBrepository .id_ ,
60
- model .scan .DBscan .timestamp == last_scan_timestamp_sub_query ))
55
+ func .coalesce (model .DBscan .timestamp , None ).label ('last_scan_timestamp' ))
56
+ query = query .join (model .DBVcsInstance ,
57
+ model .vcs_instance .DBVcsInstance .id_ == model .repository .DBrepository .vcs_instance )
58
+ query = query .join (repo_last_scan_sub_query ,
59
+ model .repository .DBrepository .id_ == repo_last_scan_sub_query .c .repository_id , isouter = True )
60
+ query = query .join (model .DBscan ,
61
+ and_ (model .scan .DBscan .repository_id == model .repository .DBrepository .id_ ,
62
+ model .scan .DBscan .timestamp == repo_last_scan_sub_query .c .max_timestamp ), isouter = True )
61
63
62
64
if only_if_has_findings :
63
65
max_base_scan_subquery = db_connection .query (model .DBscan .repository_id ,
0 commit comments