Skip to content

Commit 324d427

Browse files
authored
Merge pull request #51 from JohT/feature/parametrize-topology-sort
Parametrize Topological Sort
2 parents f0bc7a0 + 43e5bc6 commit 324d427

14 files changed

+173
-176
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Topological Sort to list the properties topologicalSortIndex (e.g. build order) and maxDistanceFromSource (build level) for each code unit node.
2+
// Needs graph-data-science plugin version >= 2.5.0
3+
4+
CALL gds.dag.topologicalSort.stream(
5+
$dependencies_projection + '-without-empty', {
6+
computeMaxDistanceFromSource: true
7+
}) YIELD nodeId, maxDistanceFromSource
8+
WITH nodeId
9+
,gds.util.asNode(nodeId) AS codeUnit
10+
,toInteger(maxDistanceFromSource) AS maxDistanceFromSource
11+
SET codeUnit.maxDistanceFromSource = maxDistanceFromSource
12+
WITH collect(nodeId) AS sortedNodeIds
13+
,collect({codeUnit: codeUnit, maxDistanceFromSource: maxDistanceFromSource}) AS topologicalSortedCodeUnits
14+
,max(maxDistanceFromSource) AS overallMaxDistance
15+
FOREACH (i IN range(0, SIZE(sortedNodeIds)-1) |
16+
SET gds.util.asNode(sortedNodeIds[i]).topologicalSortIndex = i)
17+
WITH topologicalSortedCodeUnits
18+
,overallMaxDistance
19+
UNWIND topologicalSortedCodeUnits AS sorted
20+
RETURN coalesce(sorted.codeUnit.fqn, sorted.codeUnit.fileName, sorted.codeUnit.name) AS codeUnitName
21+
,sorted.codeUnit.maxDistanceFromSource AS maxDistanceFromSource
22+
,overallMaxDistance AS overalNumberOfBuildLevels
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Topological Sort to query the properties topologicalSortIndex (e.g. build order) and maxDistanceFromSource (build level) for each code unit node in topologicalSortIndex order.
2+
// Needs graph-data-science plugin version >= 2.5.0
3+
4+
MATCH (codeUnit)
5+
WHERE codeUnit.maxDistanceFromSource IS NOT NULL
6+
AND codeUnit.topologicalSortIndex IS NOT NULL
7+
AND $dependencies_projection_node IN LABELS(codeUnit)
8+
WITH collect(codeUnit) AS codeUnits
9+
,max(codeUnit.maxDistanceFromSource) AS overallMaxDistanceFromSource
10+
UNWIND codeUnits AS codeUnit
11+
RETURN coalesce(codeUnit.fqn, codeUnit.fileName, codeUnit.name) AS codeUnitName
12+
,coalesce(replace(last(split(codeUnit.fileName, '/')), '.jar', ''), codeUnit.name) AS shortName
13+
,codeUnit.topologicalSortIndex AS topologicalSortIndex
14+
,codeUnit.maxDistanceFromSource AS maxDistanceFromSource
15+
,overallMaxDistanceFromSource
16+
,codeUnit.incomingDependencies AS incomingDependencies
17+
,codeUnit.outgoingDependencies AS outgoingDependencies
18+
ORDER BY codeUnit.topologicalSortIndex
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Topological Sort to write the properties topologicalSortIndex (e.g. build order) and maxDistanceFromSource (build level) into the graph.
2+
// Needs graph-data-science plugin version >= 2.5.0
3+
4+
CALL gds.dag.topologicalSort.stream(
5+
$dependencies_projection + '-without-empty', {
6+
computeMaxDistanceFromSource: true
7+
}) YIELD nodeId, maxDistanceFromSource
8+
WITH nodeId
9+
,gds.util.asNode(nodeId) AS codeUnit
10+
,toInteger(maxDistanceFromSource) AS maxDistanceFromSource
11+
SET codeUnit.maxDistanceFromSource = maxDistanceFromSource
12+
WITH collect(nodeId) AS sortedNodeIds
13+
,collect(codeUnit) AS sortedArtifacts
14+
,max(maxDistanceFromSource) AS overallMaxDistance
15+
FOREACH (i IN range(0, SIZE(sortedArtifacts)-1) |
16+
SET gds.util.asNode(sortedNodeIds[i]).topologicalSortIndex = i)
17+
RETURN size(sortedArtifacts) AS numberOfArtifacts, overallMaxDistance

cypher/Topological_Sort_Artifacts/0_Delete_Projections_for_directed_artifact_dependencies.cypher

Lines changed: 0 additions & 5 deletions
This file was deleted.

cypher/Topological_Sort_Artifacts/0b_Delete_Projections_for_directed_artifact_dependencies.cypher

Lines changed: 0 additions & 5 deletions
This file was deleted.

cypher/Topological_Sort_Artifacts/1_Create_directed_Projection.cypher

Lines changed: 0 additions & 9 deletions
This file was deleted.

cypher/Topological_Sort_Artifacts/2_Create_directed_subgraph_without_empty_artifacts.cypher

Lines changed: 0 additions & 10 deletions
This file was deleted.

cypher/Topological_Sort_Artifacts/3_Topological_Sort_Artifacts.cypher

Lines changed: 0 additions & 16 deletions
This file was deleted.

cypher/Topological_Sort_Artifacts/3b_Topological_Sort_Artifacts_as_list.cypher

Lines changed: 0 additions & 21 deletions
This file was deleted.

cypher/Topological_Sort_Artifacts/4_Query_artifacts_in_topological_order.cypher

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)