@@ -878,13 +878,14 @@ private HashSet<string> LoadHotspotFamilyReadyLanguages(SqliteConnection conn)
878878 }
879879 }
880880
881- private string FileReferenceCountJoinSql =>
881+ private string BuildFileReferenceCountJoinSql ( string fileSetCteName ) =>
882882 _hasReferencesTable
883- ? @"
883+ ? $ @ "
884884 LEFT JOIN (
885- SELECT file_id, COUNT(*) AS reference_count
886- FROM symbol_references
887- GROUP BY file_id
885+ SELECT r.file_id, COUNT(*) AS reference_count
886+ FROM symbol_references r
887+ JOIN { fileSetCteName } file_set ON file_set.id = r.file_id
888+ GROUP BY r.file_id
888889 ) AS reference_counts ON reference_counts.file_id = f.id"
889890 : string . Empty ;
890891
@@ -1417,20 +1418,13 @@ public List<FileResult> ListFiles(string? query = null, int limit = 20, string?
14171418 using var cmd = _conn . CreateCommand ( ) ;
14181419
14191420 var sql = $@ "
1420- SELECT f.path, f.lang, f.size, f.lines,
1421- COALESCE(symbol_counts.symbol_count, 0) AS symbol_count,
1422- { FileReferenceCountSql } AS reference_count,
1423- { GetFileColumnSql ( "checksum" ) } AS checksum,
1424- { GetFileColumnSql ( "modified" ) } AS modified,
1425- { GetFileColumnSql ( "indexed_at" ) } AS indexed_at
1426- FROM files f
1427- LEFT JOIN (
1428- SELECT file_id, COUNT(*) AS symbol_count
1429- FROM symbols
1430- GROUP BY file_id
1431- ) AS symbol_counts ON symbol_counts.file_id = f.id
1432- { FileReferenceCountJoinSql }
1433- WHERE 1=1" ;
1421+ WITH file_page AS (
1422+ SELECT f.id, f.path, f.lang, f.size, f.lines,
1423+ { GetFileColumnSql ( "checksum" ) } AS checksum,
1424+ { GetFileColumnSql ( "modified" ) } AS modified,
1425+ { GetFileColumnSql ( "indexed_at" ) } AS indexed_at
1426+ FROM files f
1427+ WHERE 1=1" ;
14341428
14351429 if ( query != null )
14361430 sql += " AND f.path LIKE @query ESCAPE '\\ '" ;
@@ -1441,6 +1435,24 @@ GROUP BY file_id
14411435 AppendPathFilters ( ref sql , pathPatterns , excludePathPatterns , excludeTests ) ;
14421436 sql += $ " ORDER BY { PathBucketOrder } , f.path LIMIT @limit";
14431437
1438+ sql += $@ "
1439+ )
1440+ SELECT f.path, f.lang, f.size, f.lines,
1441+ COALESCE(symbol_counts.symbol_count, 0) AS symbol_count,
1442+ { FileReferenceCountSql } AS reference_count,
1443+ f.checksum,
1444+ f.modified,
1445+ f.indexed_at
1446+ FROM file_page f
1447+ LEFT JOIN (
1448+ SELECT s.file_id, COUNT(*) AS symbol_count
1449+ FROM symbols s
1450+ JOIN file_page file_set ON file_set.id = s.file_id
1451+ GROUP BY s.file_id
1452+ ) AS symbol_counts ON symbol_counts.file_id = f.id
1453+ { BuildFileReferenceCountJoinSql ( "file_page" ) }
1454+ ORDER BY { PathBucketOrder } , f.path" ;
1455+
14441456 cmd . CommandText = sql ;
14451457 if ( query != null )
14461458 cmd . Parameters . AddWithValue ( "@query" , $ "%{ EscapeLikeQuery ( query ) } %") ;
0 commit comments