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