fix: Simplify component_graph query to avoid recursive CTE error

PostgreSQL does not support multiple recursive references in the same CTE.
Changed to use simpler subqueries for direct dependencies + dependents.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Christian Gick
2026-01-11 07:27:10 +02:00
parent 4fb557c624
commit 149ebdb95f

View File

@@ -256,25 +256,22 @@ export async function componentGraph(
nodes: Array<{ id: string; name: string; type: string }>;
edges: Array<{ from: string; to: string; type: string }>;
}> {
const nodes = component_id
? await query<{ id: string; name: string; type: string }>(
`WITH RECURSIVE deps AS (
SELECT id, name, type FROM components WHERE id = $1
UNION
SELECT c.id, c.name, c.type FROM components c
JOIN component_dependencies cd ON c.id = cd.depends_on
JOIN deps d ON cd.component_id = d.id
UNION
SELECT c.id, c.name, c.type FROM components c
JOIN component_dependencies cd ON c.id = cd.component_id
JOIN deps d ON cd.depends_on = d.id
)
SELECT DISTINCT id, name, type FROM deps`,
[component_id]
)
: await query<{ id: string; name: string; type: string }>(
'SELECT id, name, type FROM components'
);
let nodes: Array<{ id: string; name: string; type: string }>;
if (component_id) {
// Get component and its direct dependencies + dependents
nodes = await query<{ id: string; name: string; type: string }>(
`SELECT DISTINCT c.id, c.name, c.type FROM components c
WHERE c.id = $1
OR c.id IN (SELECT depends_on FROM component_dependencies WHERE component_id = $1)
OR c.id IN (SELECT component_id FROM component_dependencies WHERE depends_on = $1)`,
[component_id]
);
} else {
nodes = await query<{ id: string; name: string; type: string }>(
'SELECT id, name, type FROM components'
);
}
const nodeIds = nodes.map(n => n.id);
const edges = nodeIds.length > 0