MCPcopy Create free account
hub / github.com/bytebase/bytebase / TopologicalSort

Method TopologicalSort

backend/plugin/parser/base/topo_sort.go:43–78  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

41}
42
43func (g *Graph) TopologicalSort() ([]string, error) {
44 var result []string
45 inDegree := make(map[string]int)
46 outEdge := make(map[string][]*Edge)
47
48 for _, edge := range g.EdgeList {
49 inDegree[edge.End]++
50 outEdge[edge.Start] = append(outEdge[edge.Start], edge)
51 }
52
53 var queue []string
54 for id := range g.NodeMap {
55 if inDegree[id] == 0 {
56 queue = append(queue, id)
57 }
58 }
59 slices.Sort(queue)
60
61 for len(queue) > 0 {
62 node := queue[0]
63 queue = queue[1:]
64 for _, edge := range outEdge[node] {
65 inDegree[edge.End]--
66 if inDegree[edge.End] == 0 {
67 queue = append(queue, edge.End)
68 }
69 }
70 result = append(result, node)
71 }
72
73 if len(result) != len(g.NodeMap) {
74 return nil, errors.Errorf("graph has cycle")
75 }
76
77 return result, nil
78}

Callers 14

dropObjectsInOrderFunction · 0.95
createObjectsInOrderFunction · 0.95
GetDatabaseDefinitionFunction · 0.95
dropViewsInOrderFunction · 0.95
createTablesInOrderFunction · 0.95
createViewsInOrderFunction · 0.95
writeCreateTablesFunction · 0.95

Calls 1

ErrorfMethod · 0.80

Tested by

no test coverage detected