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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user