Skip to content

Commit a76ae68

Browse files
chore(web): Remove join on connections for getRepos (#527)
1 parent 5bc8fc3 commit a76ae68

File tree

8 files changed

+20
-82
lines changed

8 files changed

+20
-82
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Changed
1111
- Improved repository query performance by adding db indices. [#526](https://github.com/sourcebot-dev/sourcebot/pull/526)
12+
- Improved repository query performance by removing JOIN on `Connection` table. [#527](https://github.com/sourcebot-dev/sourcebot/pull/527)
1213

1314
## [4.7.1] - 2025-09-19
1415

packages/mcp/src/schemas.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,6 @@ export const repositoryQuerySchema = z.object({
110110
repoDisplayName: z.string().optional(),
111111
repoCloneUrl: z.string(),
112112
webUrl: z.string().optional(),
113-
linkedConnections: z.array(z.object({
114-
id: z.number(),
115-
name: z.string(),
116-
})),
117113
imageUrl: z.string().optional(),
118114
indexedAt: z.coerce.date().optional(),
119115
repoIndexingStatus: z.nativeEnum(RepoIndexingStatus),

packages/web/src/actions.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -654,13 +654,6 @@ export const getRepos = async (filter: { status?: RepoIndexingStatus[], connecti
654654
}
655655
}
656656
} : {}),
657-
},
658-
include: {
659-
connections: {
660-
include: {
661-
connection: true,
662-
}
663-
}
664657
}
665658
});
666659

@@ -671,10 +664,6 @@ export const getRepos = async (filter: { status?: RepoIndexingStatus[], connecti
671664
repoDisplayName: repo.displayName ?? undefined,
672665
repoCloneUrl: repo.cloneUrl,
673666
webUrl: repo.webUrl ?? undefined,
674-
linkedConnections: repo.connections.map(({ connection }) => ({
675-
id: connection.id,
676-
name: connection.name,
677-
})),
678667
imageUrl: repo.imageUrl ?? undefined,
679668
indexedAt: repo.indexedAt ?? undefined,
680669
repoIndexingStatus: repo.repoIndexingStatus,

packages/web/src/app/[domain]/components/errorNavIndicator.tsx

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -106,24 +106,20 @@ export const ErrorNavIndicator = () => {
106106
<TooltipProvider>
107107
{repos
108108
.slice(0, 10)
109-
.filter(item => item.linkedConnections.length > 0) // edge case: don't show repos that are orphaned and awaiting gc.
110109
.map(repo => (
111-
// Link to the first connection for the repo
112-
<Link key={repo.repoId} href={`/${domain}/connections/${repo.linkedConnections[0].id}`} onClick={() => captureEvent('wa_error_nav_job_pressed', {})}>
113-
<div className="flex items-center gap-2 px-3 py-2 bg-red-50 dark:bg-red-900/20
114-
rounded-md text-sm text-red-700 dark:text-red-300
115-
border border-red-200/50 dark:border-red-800/50
116-
hover:bg-red-100 dark:hover:bg-red-900/30 transition-colors">
117-
<Tooltip>
118-
<TooltipTrigger asChild>
119-
<span className="text-sm font-medium truncate max-w-[200px]">{repo.repoName}</span>
120-
</TooltipTrigger>
121-
<TooltipContent>
122-
{repo.repoName}
123-
</TooltipContent>
124-
</Tooltip>
125-
</div>
126-
</Link>
110+
<div key={repo.repoId} className="flex items-center gap-2 px-3 py-2 bg-red-50 dark:bg-red-900/20
111+
rounded-md text-sm text-red-700 dark:text-red-300
112+
border border-red-200/50 dark:border-red-800/50
113+
hover:bg-red-100 dark:hover:bg-red-900/30 transition-colors">
114+
<Tooltip>
115+
<TooltipTrigger asChild>
116+
<span className="text-sm font-medium truncate max-w-[200px]">{repo.repoName}</span>
117+
</TooltipTrigger>
118+
<TooltipContent>
119+
{repo.repoName}
120+
</TooltipContent>
121+
</Tooltip>
122+
</div>
127123
))}
128124
</TooltipProvider>
129125
{repos.length > 10 && (

packages/web/src/app/[domain]/components/progressNavIndicator.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,13 @@ export const ProgressNavIndicator = () => {
5050
<div className="flex flex-col gap-2 pl-4">
5151
{
5252
inProgressRepos.slice(0, 10)
53-
.filter(item => item.linkedConnections.length > 0) // edge case: don't show repos that are orphaned and awaiting gc.
5453
.map(item => (
55-
// Link to the first connection for the repo
56-
<Link key={item.repoId} href={`/${domain}/connections/${item.linkedConnections[0].id}`} onClick={() => captureEvent('wa_progress_nav_job_pressed', {})}>
57-
<div className="flex items-center gap-2 px-3 py-2 bg-green-50 dark:bg-green-900/20
58-
rounded-md text-sm text-green-700 dark:text-green-300
59-
border border-green-200/50 dark:border-green-800/50
60-
hover:bg-green-100 dark:hover:bg-green-900/30 transition-colors">
61-
<span className="font-medium truncate">{item.repoName}</span>
62-
</div>
63-
</Link>
54+
<div key={item.repoId} className="flex items-center gap-2 px-3 py-2 bg-green-50 dark:bg-green-900/20
55+
rounded-md text-sm text-green-700 dark:text-green-300
56+
border border-green-200/50 dark:border-green-800/50
57+
hover:bg-green-100 dark:hover:bg-green-900/30 transition-colors">
58+
<span className="font-medium truncate">{item.repoName}</span>
59+
</div>
6460
)
6561
)}
6662
{inProgressRepos.length > 10 && (

packages/web/src/app/[domain]/repos/columns.tsx

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { Button } from "@/components/ui/button"
44
import type { ColumnDef } from "@tanstack/react-table"
55
import { ArrowUpDown, ExternalLink, Clock, Loader2, CheckCircle2, XCircle, Trash2, Check, ListFilter } from "lucide-react"
66
import Image from "next/image"
7-
import { Badge } from "@/components/ui/badge"
87
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
98
import { cn, getRepoImageSrc } from "@/lib/utils"
109
import { RepoIndexingStatus } from "@sourcebot/db";
@@ -14,10 +13,6 @@ export type RepositoryColumnInfo = {
1413
repoId: number
1514
name: string
1615
imageUrl?: string
17-
connections: {
18-
id: number
19-
name: string
20-
}[]
2116
repoIndexingStatus: RepoIndexingStatus
2217
lastIndexed: string
2318
url: string
@@ -136,35 +131,6 @@ export const columns = (domain: string): ColumnDef<RepositoryColumnInfo>[] => [
136131
)
137132
},
138133
},
139-
{
140-
accessorKey: "connections",
141-
header: () => <div className="w-[200px]">Connections</div>,
142-
cell: ({ row }) => {
143-
const connections = row.original.connections
144-
145-
if (!connections || connections.length === 0) {
146-
return <div className="text-muted-foreground text-sm"></div>
147-
}
148-
149-
return (
150-
<div className="flex flex-wrap gap-1.5">
151-
{connections.map((connection) => (
152-
<Badge
153-
key={connection.id}
154-
variant="outline"
155-
className="text-xs px-2 py-0.5 hover:bg-muted cursor-pointer group flex items-center gap-1"
156-
onClick={() => {
157-
window.location.href = `/${domain}/connections/${connection.id}`
158-
}}
159-
>
160-
{connection.name}
161-
<ExternalLink className="h-3 w-3 text-muted-foreground opacity-50 group-hover:opacity-100 transition-opacity" />
162-
</Badge>
163-
))}
164-
</div>
165-
)
166-
},
167-
},
168134
{
169135
accessorKey: "repoIndexingStatus",
170136
header: ({ column }) => {

packages/web/src/app/[domain]/repos/repositoryTable.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ export const RepositoryTable = ({
3838
if (reposLoading) return Array(4).fill(null).map(() => ({
3939
repoId: 0,
4040
name: "",
41-
connections: [],
4241
repoIndexingStatus: RepoIndexingStatus.NEW,
4342
lastIndexed: "",
4443
url: "",
@@ -50,7 +49,6 @@ export const RepositoryTable = ({
5049
repoId: repo.repoId,
5150
name: repo.repoDisplayName ?? repo.repoName,
5251
imageUrl: repo.imageUrl,
53-
connections: repo.linkedConnections,
5452
repoIndexingStatus: repo.repoIndexingStatus as RepoIndexingStatus,
5553
lastIndexed: repo.indexedAt?.toISOString() ?? "",
5654
url: repo.webUrl ?? repo.repoCloneUrl,

packages/web/src/lib/schemas.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ export const repositoryQuerySchema = z.object({
2020
repoDisplayName: z.string().optional(),
2121
repoCloneUrl: z.string(),
2222
webUrl: z.string().optional(),
23-
linkedConnections: z.array(z.object({
24-
id: z.number(),
25-
name: z.string(),
26-
})),
2723
imageUrl: z.string().optional(),
2824
indexedAt: z.coerce.date().optional(),
2925
repoIndexingStatus: z.nativeEnum(RepoIndexingStatus),

0 commit comments

Comments
 (0)