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 }>;
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user