/
graph.go
43 lines (38 loc) · 1.38 KB
/
graph.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package primitivegraph
import (
"github.com/stackql/stackql/internal/stackql/internal_data_transfer/internaldto"
"github.com/stackql/stackql/internal/stackql/primitive"
"gonum.org/v1/gonum/graph"
)
type BasePrimitiveGraph interface {
primitive.IPrimitive
AddTxnControlCounters(t internaldto.TxnControlCounters)
ContainsIndirect() bool
Execute(ctx primitive.IPrimitiveCtx) internaldto.ExecutorOutput
GetInputFromAlias(string) (internaldto.ExecutorOutput, bool)
IncidentData(fromID int64, input internaldto.ExecutorOutput) error
GetTxnControlCounterSlice() []internaldto.TxnControlCounters
Optimise() error
SetContainsIndirect(containsView bool)
SetExecutor(func(pc primitive.IPrimitiveCtx) internaldto.ExecutorOutput) error
SetInputAlias(alias string, id int64) error
SetTxnID(id int)
Sort() (sorted []graph.Node, err error)
Size() int
ContainsUserManagedRelation() bool
SetContainsUserManagedRelation(containsUserRelation bool)
NewWeightedEdge(PrimitiveNode, PrimitiveNode, float64) graph.WeightedEdge
SetWeightedEdge(graph.WeightedEdge)
NewNode() graph.Node
AddNode(graph.Node)
Nodes() graph.Nodes
}
type PrimitiveGraph interface {
primitive.IPrimitive
BasePrimitiveGraph
CreatePrimitiveNode(pr primitive.IPrimitive) PrimitiveNode
NewDependency(from PrimitiveNode, to PrimitiveNode, weight float64)
}
func SortPlan(pg PrimitiveGraph) ([]graph.Node, error) {
return pg.Sort()
}