diff --git a/CHANGELOG.md b/CHANGELOG.md
index f3bbad3c4..1530d376d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Improved repository query performance by adding db indices. [#526](https://github.com/sourcebot-dev/sourcebot/pull/526)
+- Improved repository query performance by removing JOIN on `Connection` table. [#527](https://github.com/sourcebot-dev/sourcebot/pull/527)
## [4.7.1] - 2025-09-19
diff --git a/packages/mcp/src/schemas.ts b/packages/mcp/src/schemas.ts
index 75413cce8..40736b596 100644
--- a/packages/mcp/src/schemas.ts
+++ b/packages/mcp/src/schemas.ts
@@ -110,10 +110,6 @@ export const repositoryQuerySchema = z.object({
repoDisplayName: z.string().optional(),
repoCloneUrl: z.string(),
webUrl: z.string().optional(),
- linkedConnections: z.array(z.object({
- id: z.number(),
- name: z.string(),
- })),
imageUrl: z.string().optional(),
indexedAt: z.coerce.date().optional(),
repoIndexingStatus: z.nativeEnum(RepoIndexingStatus),
diff --git a/packages/web/src/actions.ts b/packages/web/src/actions.ts
index 25e62a7f9..72cf755c6 100644
--- a/packages/web/src/actions.ts
+++ b/packages/web/src/actions.ts
@@ -654,13 +654,6 @@ export const getRepos = async (filter: { status?: RepoIndexingStatus[], connecti
}
}
} : {}),
- },
- include: {
- connections: {
- include: {
- connection: true,
- }
- }
}
});
@@ -671,10 +664,6 @@ export const getRepos = async (filter: { status?: RepoIndexingStatus[], connecti
repoDisplayName: repo.displayName ?? undefined,
repoCloneUrl: repo.cloneUrl,
webUrl: repo.webUrl ?? undefined,
- linkedConnections: repo.connections.map(({ connection }) => ({
- id: connection.id,
- name: connection.name,
- })),
imageUrl: repo.imageUrl ?? undefined,
indexedAt: repo.indexedAt ?? undefined,
repoIndexingStatus: repo.repoIndexingStatus,
diff --git a/packages/web/src/app/[domain]/components/errorNavIndicator.tsx b/packages/web/src/app/[domain]/components/errorNavIndicator.tsx
index 4c1bd6b0c..4f7810aab 100644
--- a/packages/web/src/app/[domain]/components/errorNavIndicator.tsx
+++ b/packages/web/src/app/[domain]/components/errorNavIndicator.tsx
@@ -106,24 +106,20 @@ export const ErrorNavIndicator = () => {
{repos
.slice(0, 10)
- .filter(item => item.linkedConnections.length > 0) // edge case: don't show repos that are orphaned and awaiting gc.
.map(repo => (
- // Link to the first connection for the repo
- captureEvent('wa_error_nav_job_pressed', {})}>
-
-
-
- {repo.repoName}
-
-
- {repo.repoName}
-
-
-
-
+
+
+
+ {repo.repoName}
+
+
+ {repo.repoName}
+
+
+
))}
{repos.length > 10 && (
diff --git a/packages/web/src/app/[domain]/components/progressNavIndicator.tsx b/packages/web/src/app/[domain]/components/progressNavIndicator.tsx
index 68a8611e3..f9e0d8cb2 100644
--- a/packages/web/src/app/[domain]/components/progressNavIndicator.tsx
+++ b/packages/web/src/app/[domain]/components/progressNavIndicator.tsx
@@ -50,17 +50,13 @@ export const ProgressNavIndicator = () => {
{
inProgressRepos.slice(0, 10)
- .filter(item => item.linkedConnections.length > 0) // edge case: don't show repos that are orphaned and awaiting gc.
.map(item => (
- // Link to the first connection for the repo
-
captureEvent('wa_progress_nav_job_pressed', {})}>
-
- {item.repoName}
-
-
+
+ {item.repoName}
+
)
)}
{inProgressRepos.length > 10 && (
diff --git a/packages/web/src/app/[domain]/repos/columns.tsx b/packages/web/src/app/[domain]/repos/columns.tsx
index e27a8816f..dc72c4a27 100644
--- a/packages/web/src/app/[domain]/repos/columns.tsx
+++ b/packages/web/src/app/[domain]/repos/columns.tsx
@@ -4,7 +4,6 @@ import { Button } from "@/components/ui/button"
import type { ColumnDef } from "@tanstack/react-table"
import { ArrowUpDown, ExternalLink, Clock, Loader2, CheckCircle2, XCircle, Trash2, Check, ListFilter } from "lucide-react"
import Image from "next/image"
-import { Badge } from "@/components/ui/badge"
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
import { cn, getRepoImageSrc } from "@/lib/utils"
import { RepoIndexingStatus } from "@sourcebot/db";
@@ -14,10 +13,6 @@ export type RepositoryColumnInfo = {
repoId: number
name: string
imageUrl?: string
- connections: {
- id: number
- name: string
- }[]
repoIndexingStatus: RepoIndexingStatus
lastIndexed: string
url: string
@@ -136,35 +131,6 @@ export const columns = (domain: string): ColumnDef
[] => [
)
},
},
- {
- accessorKey: "connections",
- header: () => Connections
,
- cell: ({ row }) => {
- const connections = row.original.connections
-
- if (!connections || connections.length === 0) {
- return —
- }
-
- return (
-
- {connections.map((connection) => (
- {
- window.location.href = `/${domain}/connections/${connection.id}`
- }}
- >
- {connection.name}
-
-
- ))}
-
- )
- },
- },
{
accessorKey: "repoIndexingStatus",
header: ({ column }) => {
diff --git a/packages/web/src/app/[domain]/repos/repositoryTable.tsx b/packages/web/src/app/[domain]/repos/repositoryTable.tsx
index 45a20100b..8bfa74ece 100644
--- a/packages/web/src/app/[domain]/repos/repositoryTable.tsx
+++ b/packages/web/src/app/[domain]/repos/repositoryTable.tsx
@@ -38,7 +38,6 @@ export const RepositoryTable = ({
if (reposLoading) return Array(4).fill(null).map(() => ({
repoId: 0,
name: "",
- connections: [],
repoIndexingStatus: RepoIndexingStatus.NEW,
lastIndexed: "",
url: "",
@@ -50,7 +49,6 @@ export const RepositoryTable = ({
repoId: repo.repoId,
name: repo.repoDisplayName ?? repo.repoName,
imageUrl: repo.imageUrl,
- connections: repo.linkedConnections,
repoIndexingStatus: repo.repoIndexingStatus as RepoIndexingStatus,
lastIndexed: repo.indexedAt?.toISOString() ?? "",
url: repo.webUrl ?? repo.repoCloneUrl,
diff --git a/packages/web/src/lib/schemas.ts b/packages/web/src/lib/schemas.ts
index 56af10849..7d37d9ca8 100644
--- a/packages/web/src/lib/schemas.ts
+++ b/packages/web/src/lib/schemas.ts
@@ -20,10 +20,6 @@ export const repositoryQuerySchema = z.object({
repoDisplayName: z.string().optional(),
repoCloneUrl: z.string(),
webUrl: z.string().optional(),
- linkedConnections: z.array(z.object({
- id: z.number(),
- name: z.string(),
- })),
imageUrl: z.string().optional(),
indexedAt: z.coerce.date().optional(),
repoIndexingStatus: z.nativeEnum(RepoIndexingStatus),