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),